将基类的实例传递到派生类
Pass instance of base class into derived class
在我的应用程序中,我有一个基类类型的对象列表。每个基类都可以有多个配置(派生类),我一直在试图弄清楚如何将基类传递到派生类,这样我就不需要每次都重新初始化值。我知道我可以这样做,但我很好奇,如果有一个更容易/不笨拙的方式,因为基类在我的代码需要一段时间来初始化,并有很多特性。
简单的例子:
class Base {
public:
Base(int a, int b) : a(a), b(b) {}
protected:
int a;
int b;
};
class Derived : public Base {
public:
Derived(int c, int d, Base base) : c(c), d(d) {
this->a = base.a;
this->b = base.b;
}
private:
int c;
int d;
};
OR(由于开销大,试图避免这种情况)
class Base {
public:
Base(int a, int b) : a(a), b(b) {}
protected:
int a;
int b;
};
class Derived : public Base {
public:
Derived(int c, int d, const Base &base) : Base(base), c(c), d(d) {}
private:
int c;
int d;
}
如果Base
有复制构造函数,那么您可以简单地使用:
class Base {
public:
Base(int a, int b) : a(a), b(b) {}
Base(const Base& base) : a(base.a), b(base.b) {} // make your own or use the default
protected:
int a;
int b;
};
class Derived : public Base {
public:
Derived(int c, int d, const Base& base) : Base(base), c(c), d(d) {}
private:
int c;
int d;
}
两者都是错误的:在派生类中,您不能通过基类对象访问基类的受保护成员。要解决这个问题,您可以为基类定义复制构造,并使用它来初始化派生类
相关文章:
- 如何通过派生类函数更改基类中的向量
- 如何使用基类指针引用派生类成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 如果基类包含双指针成员,则派生类的构造函数
- 为什么此派生对象无法访问基类的后递减方法?
- 使用基类中的派生方法运行线程,而无需使用模板
- 是否可以使用基类非虚拟方法中的派生类虚拟方法?
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 在派生类中使用基类的私有成员变量的最佳方法
- 基类和派生类的多态赋值运算符
- 如何在从抽象基派生的类中实现相同的方法?
- 基类的填充将被复制到派生类中
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 指向基类派生类的 std::unique_ptr 的指针
- 为什么基类数据在派生类数据之前初始化
- c++ 派生基类 Friend 函数访问父级上的私有函数
- 如何将基类替换为派生基类
- 当基类未指定构造函数时,如何使用仅具有带参数的构造函数的类派生基类?
- 解析公用派生基类模板中的函数模板名称时出错"Not declared in this scope"