zoukankan      html  css  js  c++  java
  • 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(){//....};

    }

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

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

  • 相关阅读:
    从一个集合中查找最大最小的N个元素——Python heapq 堆数据结构
    算法导论第二章小试牛刀
    python网络编程初级
    python基础的几个小练习题
    LeetCode:114_Flatten Binary Tree to Linked List | 将一棵二叉树变成链表的形式 | Medium
    LeetCode:111_Minimum Depth of Binary Tree | 二叉树的最小深度 | Easy
    LeetCode:110_Balanced Binary Tree | 平衡二叉树 | Easy
    LeetCode: 106_Construct Binary Tree from Inorder and Postorder Traversal | 根据中序和后序遍历构建二叉树 | Medium
    mysql中json_object函数的使用?
    mysql中json_remove函数的使用?
  • 原文地址:https://www.cnblogs.com/zhengze/p/13967168.html
Copyright © 2011-2022 走看看