如何通过构造参数来使用私有继承?

Qin*_*hao 3 c++

一些代码如下:

class maven
{
private:
        string username;
public:
        maven(string un)
        {
            username = un;
        }
};

class car : private maven
{
public:
       /... do something .../
};
Run Code Online (Sandbox Code Playgroud)

然后我想在对象车中获得一个maven实例.但是如何用参数构造maven对象呢?我已经查找了规范和注释.

Jon*_*Jon 5

如果您的意思是如何构造对象的maven一部分car,请使用初始化列表:

class car : private maven
{
public:
    // This way
    car() : maven("foo") {
    }

    // Or this way
    car(string username) : maven(username) {
    }
};
Run Code Online (Sandbox Code Playgroud)

值得注意的是,这样你就不会得到一个maven实例car; 实际上,car它本身就是一个maven很深的内部(尽管它并没有告诉任何人).

除非您需要访问mavenprotected成员出于某种原因,做事的方式是不是最好的.您可能想要考虑聚合类的对象maven,例如:

class car
{
private:
    maven m_maven;
public:
    // Initialize the member with a default parameter
    car() : m_maven("foo") {
    }

    // Or this way
    car(string username) : m_maven(username) {
    }
};
Run Code Online (Sandbox Code Playgroud)

有关简短讨论,请参阅C++ FAQ lite的此页面.