在我的应用程序中,我有一个基类类型的对象列表。每个基类都可以有多个配置(派生类),我一直在试图弄清楚如何将基类传递给派生类,所以我不需要每次都重新初始化值。我知道我可以通过以下方式实现它,但我很好奇是否有更容易/更少笨重的方式,因为我的代码中的基类需要一段时间来初始化并具有很多功能。
简单示例:
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;
}
答案 0 :(得分:4)
如果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;
}
答案 1 :(得分:0)
这两个都是错误的:在Derived类中,您不能访问基类的受保护成员throngh基础对象。要解决您的问题,您可以为基类定义复制构造,并使用它来初始化Derived类的基础部分