![](/img/trans.png)
[英]C++ Inheritance (instantiating derived class inside base class)
[英]C++ - Instantiating derived class and using base class's constructor
我有一个基类,其构造函数需要一个参数(字符串)。 然后我有一个派生类,它也有自己的构造函数。 我想实例化派生类,并且能够设置基类的构造函数的参数。
class BaseClass {
public:
BaseClass (string a);
};
class DerivedClass : public BaseClass {
public:
DerivedClass (string b);
};
int main() {
DerivedClass abc ("Hello");
}
我不确定在调用派生类时如何设置基类构造函数的参数。
你有两种可能性 - 内联:
class DerivedClass : public BaseClass {
public:
DerivedClass (string b) : BaseClass(b) {}
};
或超出范围:
class DerivedClass : public BaseClass {
public:
DerivedClass (string b);
};
/* ... */
DerivedClass::DerivedClass(string b) : BaseClass(b)
{}
更多例子:
class DerivedClass : public BaseClass {
public:
DerivedClass(int a, string b, string c);
private:
int x;
};
DerivedClass::DerivedClass(int a, string b, string c) : BaseClass(b + c), x(a)
{}
在初始化列表上:
class MyType {
public:
MyType(int val) { myVal = val; } // needs int
private:
int myVal;
};
class DerivedClass : public BaseClass {
public:
DerivedClass(int a, string b) : BaseClass(b)
{ x = a; } // error, this tries to assign 'a' to default-constructed 'x'
// but MyType doesn't have default constructor
DerivedClass(int a, string b) : BaseClass(b), x(a)
{} // this is the way to do it
private:
MyType x;
};
如果您要做的只是从传递给基类构造函数的单个参数构造派生类实例,您可以这样做:
C ++ 03(我添加了显式,并通过const引用):
class DerivedClass : public BaseClass {
public:
explicit DerivedClass (const std::string& b) : BaseClass(b) {}
};
C ++ 11(获取所有基类构造函数):
class DerivedClass : public BaseClass {
public:
using BaseClass::BaseClass;
};
如果要调用不同的DerivedClass
构造函数并将BaseClass
构造函数调用为其他值,您也可以这样做:
class DerivedClass : public BaseClass {
public:
explicit DerivedClass () : BaseClass("Hello, World!") {}
};
用这个
DerivedClass::DerivedClass(string b)
: BaseClass(b)
{
}
只需将参数直接传递给基类构造函数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.