You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

私有基类构造函数仍会被调用吗?派生类实例化为何触发基类构造?

问题解答: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 20:55:06