您的位置:首页 > 编程语言 > C语言/C++

C++学习:构造函数

2015-12-27 14:51 501 查看
成员函数的一种

名字与类名相同,可以有参数,不能有返回值

定义时候没有写构造函数,则编译器生成一个默认的没有参数的构造函数,不做任何操作

一个类可以有多个构造函数

构造函数也可以写在类的定义的外面

一个类可以有多个构造函数

对象一旦被定义,不管以什么形式被定义,那么构造函数都会被调用

class Complex{
private:
double r,i;
public:
void set(double r,double i);
};//编译器自动生成默认构造函数
Complex c1;
Complex *p = new Complex;
//上面两个语句类的默认构造函数均被调用


class A{
private:
double real,imag;
public:
A(double r,double i = 0);
};
A::A(double r,double i){
real = r;
imag = i;
}
A a1;//缺少函数参数
A *a = new A;//少参
A a(2);//ok
A a(2,4);//ok
A *a = new A(3,4);//ok


class CSample{
int x;
public:
CSample(){
cout << "Constructor 1 Called" << endl;
}
CSample(int n){
x = n;
cout << "Constructor 2 Called" << endl;
}
};

int main()
{
CSample array1[2];//构造器1两次被调用
CSample array2[2] = {4,5};//构造器2两次被调用
CSample array3[2] = {3};//先调用2再调用1
CSample *array4 = new CSample[2];//调用两次构造器1
delete []array4;
return 0;
}


class Test{
public:
Test(int n){}//(1)
Test(int n,int m){}//(2)
Test(){}//(3)
};
Test array1[3] = {1, Test(1,2)};
//分别用(1)(2)(3)初始化
Test array2[3] = {Test(2,3),Test(1,2),1};
//(2)(2)(1)
Test *pArray[3] = {new Test(4),new Test(1,2)};
//(1)(2)
//只初始化两个对象,因为是指针数组,最后一个没有参数
//意味着最后一个至真没有确定指向什么位置,所以不调用构造函数
//没有生成新的对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: