建议在设计C++类时提供默认构造函数,这应该是个好的习惯

我们知道,C++的任何类都会自动(隐式)调用父类的构造函数和析构函数,并且设计C++类的时候,编译器默认提供了一个默认构造函数,但是,我们在类中,设计了任何新的构造函数时,C++编译器将不再提供默认的构造函数,此时,建议在设计C++类时手动提供默认构造函数,即:无参构造函数,主要是为了继承的考虑,否则子类的任何构造函数必须显示指定父类某个构造函数,看看下面的代码:

class CBase

{

public:

CBase(string param){m_param = param; }

private:

string m_param;

};


class CSon: public CBase

{

public:

CSon(){ }//之类会报错,因为CBase没有默认构造函数可用

};

必须修改为:

class CSon: public CBase

{

public:

CSon(): CBase("test") { } //必须指定其他构造函数,因为父类没有提供默认构造函数了

};


所以,在进行类的设计时,考虑到继承子类的情况,最好每个类都提供一个无参的默认构造函数,以免出现无法找到合适的构造函数的情况,因为在类的构造函数中不指定父类的构造函数时,系统默认都是调用父类的无参构造函数,所以当父类没有无参构造函数的情况下,必须显示的指定父类的其他构造函数,如:CSon(): CBase("test") ,所以提供一个无参的构造函数,即:默认构造函数,是一个好习惯。

有时,C++编译器会提示这样的错误:没有找到合适的构造函数,实际上不是子类没有合适的构造函数,而是由于父类没有合适的构造函数,所以这点需要注意了,因为子类的构造函数都会自动调用一个父类的构造函数,如果子类的构造函数没有指定父类的构造函数就会去找父类的默认构造函数,如果父类没有默认构造函数,那么就会提示错误了,否则必须在子类构造函数中显示指定父类的某个构造函数,形如:CSon(): CBase("test") 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值