有些代码如下:
class maven
{
private:
string username;
public:
maven(string un)
{
username = un;
}
};
class car : private maven
{
public:
/... do something .../
};
然后我想在对象车中获得一个maven实例。 但是如何用参数构造maven对象呢? 我查阅了规范和注释。
答案 0 :(得分:5)
如果您的意思是如何构造maven
对象的car
部分,请使用初始化列表执行此操作:
class car : private maven
{
public:
// This way
car() : maven("foo") {
}
// Or this way
car(string username) : maven(username) {
}
};
值得注意的是,这样您就无法在maven
内获得car
个实例;实际上,car
本身就是一个maven
内部(尽管它并没有告诉任何人)。
除非您出于某种原因需要访问maven
的{{1}}成员,否则这种做事方式并不是最好的。您可能需要考虑聚合类protected
的对象,例如:
maven
有关简短讨论,请参阅C ++ FAQ lite的this page。
答案 1 :(得分:2)
在car
中创建一个构造函数,并在初始化列表中初始化其基础maven
。
class car : private maven
{
public:
car(string un) : maven(un)
{
}
};
答案 2 :(得分:0)
class car : private maven
{
public:
car() : maven("some_username")
{
}
};
答案 3 :(得分:0)
请参阅Jon的答案,了解私有继承和组合之间的区别,但是如果您想访问maven
实例,因为有这样的函数:
void baz(maven*);
然后在这两种情况下,只有car
的成员和朋友才能访问maven
个实例,因此car
的成员例如car::zoo
:
在私有继承的情况下:
car::zoo(){ baz(this); }
或在组成的情况下:
car::zoo(){ baz(&m_maven); }
在这两种情况下,car
之外没有其他函数或方法,也没有car
派生的类中的方法可以做到这一点。