C++学习:构造函数

成员函数的一种

  • 名字与类名相同,可以有参数,不能有返回值
  • 定义时候没有写构造函数,则编译器生成一个默认的没有参数的构造函数,不做任何操作
  • 一个类可以有多个构造函数
  • 构造函数也可以写在类的定义的外面
  • 一个类可以有多个构造函数
  • 对象一旦被定义,不管以什么形式被定义,那么构造函数都会被调用
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)
//只初始化两个对象,因为是指针数组,最后一个没有参数
//意味着最后一个至真没有确定指向什么位置,所以不调用构造函数
//没有生成新的对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值