私有基类构造函数仍会被调用吗?派生类实例化为何触发基类构造?
问题解答:private继承下基类构造函数仍被调用的原因
你的核心误解在于混淆了继承访问权限和基类构造函数的调用逻辑,两者完全是不同的概念:
- 不管使用
public/private/protected哪种继承方式,当创建子类对象时,编译器都会先自动调用所有直接基类的默认构造函数(除非子类构造函数显式指定调用基类的其他构造函数)。这是因为子类对象包含基类的子对象,必须完成基类部分的初始化才能构造出完整的子类对象。 private继承的作用仅仅是修改基类成员在子类中的访问权限:把基类的public/protected成员变为子类的private成员,同时外部代码无法通过子类对象访问任何基类成员。但它并不会阻止基类构造函数被调用。
你的代码中Car类没有自定义构造函数,编译器会自动生成一个默认构造函数,这个生成的构造函数会自动调用Vehicle和FourWheeler的默认构造函数,所以实例化Car时会输出两行内容。
你的代码
#include <iostream> // first base class class Vehicle { public: Vehicle() { std::cout << "This is a Vehicle\n"; } }; // second base class class FourWheeler { public: FourWheeler() { std::cout << "This is a 4 wheeler Vehicle\n"; } }; // sub class derived from two base classes class Car : private Vehicle, private FourWheeler { }; // main function int main() { // Creating object of sub class will // invoke the constructor of base classes? Car obj; return 0; }
内容的提问来源于stack exchange,提问作者KAMLESH SINGH
相关产品推荐
相关产品推荐

