建议在设计C++类时提供默认构造函数,这应该是个好的习惯
2013-12-21 14:25
246 查看
我们知道,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") 。
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") 。
相关文章推荐
- 应该提供默认构造函数的原因
- VC++深入详解笔记 C++类的设计习惯及头文件重复包含问题的解决
- C++类的设计习惯及头文件重复包含问题的解决
- 编写高质量代码改善C#程序的157个建议——建议47:即使提供了显式释放方法,也应该在终结器中提供隐式清理
- 改进网站设计提供的有意的建议
- 建议47:即使提供了显式释放方法,也应该在终结器中提供隐式清理
- HOTPOWER---中国十佳优秀UI设计团队,提供游戏UI顶级设计服务
- 关于Schema设计规范及SQL使用建议
- 企业数据中心设计建议方案
- 电路设计_过压器件压敏电阻的选型建议
- Java程序员应该了解的10个设计原则
- Web MVC 架构中,一个 C(controller)至少应该提供几个 A(Action)?
- leetcode -- Peeking Iterator -- 考察设计模式,应该考得不多
- 一个好的界面设计应该注意的75个原则
- C++类和接口的设计原则探讨
- 在重构的过程中,什么情况下应该使用设计模式?应该用哪种模式?
- 《Android源代码设计模式解析》读书笔记——Android中你应该知道的设计模式
- 97条架构建议-多尝试-掌握领域知识-设计
- 非常欢迎您的莅临指导,并提供宝贵意见和建议
- 以百度钱包为例谈钱包类产品应该如何设计