C++ - 实例化派生类并使用基类的构造函数
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(我添加了显式,并通过常量引用传递):
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)
{
}
只需将参数直接传递给基类构造函数
相关文章:
- C++17 使用驱动类常量作为基类构造函数的参数来初始化基类构造函数
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- 在成员构造函数之后调用基类构造函数
- 如何在将原始指针移动到基类构造函数之前从unique_ptr中提取原始指针
- C++:在共享对象中调用抽象基类构造函数/未定义的符号
- 如何在 C++ 中将参数传递给基类构造函数
- 将数据成员的指针传递给基类构造函数是否安全?
- 使用基类构造函数初始化儿童类
- 使用基类构造函数的子类构造函数的大纲定义
- MSVC 无法识别继承模板类的模板类的"直接"基类构造函数
- 子类的构造函数后跟冒号后的基类构造函数是什么意思?
- 是否可以使用基类构造函数通过派生类将值初始化为基类私有成员?
- 当派生类无法轻易将参数传递到基类时,如何调用基类构造函数
- 是否可以在运行时切换到不同的基类构造函数?
- 对基类构造函数的未定义引用
- 如何为基类构造函数中的每个子类执行特定任务
- 将类传递到基类构造函数的模板参数中?
- 如何在基类构造函数中使用派生类成员
- (为什么)纯虚拟派生类中是否需要虚拟基类构造函数调用?
- 使用相同的参数调用基类C++构造函数