• c++一些重要的细节


    •  空指针和野指针

     int *p = NULL; //空指针,即地址为0的指针

    int *q = (int)0x1234; //野指针

    空指针和野指针,我们都没有权限访问。


    •  指针地址大小

    指针地址所占内存大小跟系统有关。

    32位机的指针占4个byte,64位机占8个byte。


    • 指针常量和常量指针的声明

    const int * p; //常量指针

    int * const p; // 指针常量


    • 利用指针访问数组 

    int arr[] = {1,2,3};

    int *p = arr; //数组名为首地址

    //利用指针访问数组

    for(int i=0;i<sizeof(arr)/sizeof(int);i++){
      cout << *p << endl;
      p++;
    }


    • 不要返回局部变量的地址 

    局部变量存在栈区,引用完毕后会被销毁,所以不要返回局部变量的地址。


    •  指向堆区的指针

    int * p = new int(10);

    指针在栈区,而指针保存的值在堆区


    • 释放数组 

    int * arr = new int[10];

    delete[] arr; //释放数组


    • 引用

    引用就是变量的别名

    int a = 0;

    int &b = a; //引用初始化,这是引用必须的步骤,而且b引用a后不能再引用其他变量

    至此,&符号有两个功能:指针取地址、取别名


    •  形参修饰实参的方法:地址传递引用传递

    指针传递:int func(int *ptr){}

    引用传递:int func(int &foo){}


    • 引用的本质

    int & func() {

      //.....

      return 1;

    }

    func() = 1000;  // func()是引用的,能被赋值了

    引用的本质: 指针常量


    •  struct和class的区别

    struct和class的区别就在于默认访问权限不同。

    struct: public

    class: private

    浅拷贝、深拷贝


    •  class的嵌套场景下,构造和析构的顺序

    class A{

     B b;

    }

    class B{

    }

    A a;

    先构造B,再构造A

    先析构A,再析构B


    •  静态成员

    类和对象都能访问静态成员函数

    类的静态成员函数只能访问静态成员变量,因为他没法区分非静态成员变量是哪个对象的。

    空对象的内存大小是1byte


    this的本质是指针常量


    •  友元

    友元实现的三种方案:

    1.全局函数

    2.类

    3.类中的成员函数


    非静态成员不会被继承

    子类继承父类的所有成员变量和函数,编译器会屏蔽子类对父类的private成员访问


    •  多态

    多态有两类:

    静态多态:重载实现,在编译阶段确定函数地址

    动态多态: 派生和虚函数实现,在运行阶段确定函数地址


    • 虚函数 

    class A{

    public:

      virtual int func() = 0; // =0代表纯虚函数

    }

    class B:public A

    {

    public: 

      int func(){//....};

    }

    如果一个类中实现了纯虚函数,这个类变成了抽象类

    子类必须重写抽象类的纯虚函数。

  • 相关阅读:
    http
    jquery
    wsgi
    urls控制器
    模板template
    ORM
    C++中获取汉字拼音首字缩写/全拼及生僻字的处理
    C语言函数strstr
    CString 成员函数用法
    判断字符串中是否存在中文
  • 原文地址:https://www.cnblogs.com/zhengze/p/13967168.html
Copyright © 2020-2023  润新知