2

C++易错概念

 1 year ago
source link: https://xuranus.github.io/2022/06/24/C-%E6%98%93%E9%94%99%E6%A6%82%E5%BF%B5/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

C++易错概念

2022-06-23

666 1 分钟

构造函数不能定义为虚函数

构造器的执行过程分为两个阶段:初始化普通计算

class Demo {
public:
int value1;
int value2;

Demo(int v1, int v2):value2(v2), value1(v1) { // 初始化
// 普通计算
}
}

初始化阶段中,不在初始化列表的对象执行默认的初始化方法,在初始化列表中的尘缘执行指定的构造方法。在普通计算阶段,也可对初始过的成员变量再做修改。

class Demo {
public:
int value1;
int value2;

Demo(): value1(1), value2(value1) {} //错误
}

初始化阶段不一定顺序执行成员初始化,不能使用某个成员初始化其他成员。

拷贝构造/复制构造函数

CLASS_NAME(const CLASS_NAME&); // const可选


如果类没有显式声明一个拷贝构造函数,那么,编译器会自动生成一个进行对象之间非static成员的拷贝

拷贝函数的调用场景:

  • 对象作为函数参数,值传递
  • 对象作为函数返回值,以值传递的形式返回
  • 对象用于给另外一个对象初始化(赋值初始化)

析构函数:如果没有定义,编译器会提供一个默认的析构函数

类的静态成员:静态成员变量一般要在类外初始化(即使是private)。类的静态方法不能直接访问类的静态成员变量,而类的任何成员函数都能访问类的静态成员。

友元:友元允许特定非成员函数访问一个类的私有成员。友元会破坏类的封装。
可以声明友元类和友元函数。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK