构造函数基本概念
- 名字和类名相同,可以有参数,不能有返回值
- 作用是对对象进行初始化,如给成员变量赋值
- 如果定义类时,没有写构造函数,则编译器生成一个无参的构造函数,不进行任何操作
- 如果用户自己定义了构造函数,则编译器不再生成构造函数
- 对象生成时构造函数被调用,对象一旦生成,就再也不在其上执行构造函数了
- 一个类可以有多个构造函数
重要:有时对象没有构造函数 被初始化就被使用会导致程序出错
调用默认构造函数
示例:
class Complex{
private:
double real, imag;
public:
void Set(double r, double i);
};
Complex c1; // 默认构造函数被调用
Complex *pc = new Complex;//默认构造函数被调用
调用用户自定义构造函数
class Complex{
private:
double real, imag;
public:
Complex (double r, double i=0);
}
Compelex::Complex(double r, double i){
real = r;
image = i;
}
Complex c1; //error 缺少构造参数
Complex *pc = new Complex; // error,没有参数
Complex c1(2); //ok
Conplex c1(2, 4), c2(3,5);
Complex *pc = new Complex(3, 4);
不难看出,当用户定义了自定义构造函数的时候初始化就必须按照用户定义的构造函数来,否则就会报错
可以有多个构造函数,参数个数或类型不同
class Complex{
private:
double read, imag;
public:
void Set(double r, double i);
Complex(double r, double i);
Complex(double r);
Complex(Complex c1, Complex c2);
};
Complex::Complex(double r, double i){
real