C++ 派生类的基类值的初始化
我想创建基类C++ 派生类的基类值的初始化,c++,inheritance,initialization,C++,Inheritance,Initialization,我想创建基类Foo的ab对象,它将变量值初始化为我决定的值,然后我想创建派生类Bar的对象,我先前决定的变量值与Bar继承的Foo保持一致,类似于对变量值进行一次常量初始化 是否有一种方法可以做到这一点,而不必在每次我创建Bar对象时传入值,就像创建Foo对象一样,或者将类值默认为5 例如: // Base class class Foo { private: int value; public: Foo() {} Foo(int value) : value(value
Foo
的ab对象,它将变量值初始化为我决定的值,然后我想创建派生类Bar
的对象,我先前决定的变量值与Bar
继承的Foo
保持一致,类似于对变量值进行一次常量初始化
是否有一种方法可以做到这一点,而不必在每次我创建Bar
对象时传入值,就像创建Foo
对象一样,或者将类值默认为5
例如:
// Base class
class Foo {
private:
int value;
public:
Foo() {}
Foo(int value) : value(value) {}
int getValue() { return value; }
};
// Derived class
class Bar : public Foo {
private:
public:
Bar() {}
};
Foo foo(5);
foo.getValue() // 5
Bar bar;
bar.getValue() // this I also want to be 5 now
您可以在类范围或方法范围内使用静态变量来实现这一点(后者有一些不同之处,如延迟初始化、线程安全初始化等。尽管在您的用例中没有太大区别,但最好将后者作为一个选项牢记在心)。比如说
#include <iostream>
using std::cout;
using std::endl;
// Base class
class Foo {
private:
static int value;
public:
Foo() {}
Foo(int value) {
Foo::value = value;
}
int getValue() { return value; }
};
int Foo::value = 0;
// Derived class
class Bar : public Foo {
private:
public:
Bar() {}
};
int main() {
Foo foo(5);
cout << foo.getValue() << endl;
Bar bar;
cout << bar.getValue() << endl;
}
#包括
使用std::cout;
使用std::endl;
//基类
福班{
私人:
静态int值;
公众:
Foo(){}
Foo(int值){
Foo::value=value;
}
int getValue(){return value;}
};
intfoo::value=0;
//派生类
分类栏:公共食品{
私人:
公众:
Bar(){}
};
int main(){
富富(5),;
cout您可以在类范围或方法范围内使用静态变量来实现这一点(后者有一些不同之处,如惰性初始化、线程安全初始化等。尽管这对您的用例没有太大的影响,但最好将后者作为一个选项记在心里)
#include <iostream>
using std::cout;
using std::endl;
// Base class
class Foo {
private:
static int value;
public:
Foo() {}
Foo(int value) {
Foo::value = value;
}
int getValue() { return value; }
};
int Foo::value = 0;
// Derived class
class Bar : public Foo {
private:
public:
Bar() {}
};
int main() {
Foo foo(5);
cout << foo.getValue() << endl;
Bar bar;
cout << bar.getValue() << endl;
}
#包括
使用std::cout;
使用std::endl;
//基类
福班{
私人:
静态int值;
公众:
Foo(){}
Foo(int值){
Foo::value=value;
}
int getValue(){return value;}
};
intfoo::value=0;
//派生类
分类栏:公共食品{
私人:
公众:
Bar(){}
};
int main(){
富富(5),;
如果我正确理解了您的目标,那么它似乎注定要失败。您不是从基类的对象/实例继承的,而是从基类继承的,该类不知道现有对象的成员变量的值。是否存储对您尝试“继承”的对象的引用帮助实现您想要的?您的需求是在基类构造中实现一个副作用,它会影响所有后续派生类构造。至少可以这么说,这是令人困惑的。以面向对象的方式这样做是可能的。您可以编写一个工厂类,其中构造函数接受变量值。创建对象工厂将使用此值创建。如果我正确理解您的目标,它似乎注定要失败。您不是从基类的对象/实例继承,而是从基类继承,该类不知道现有对象的成员变量的值。是否存储对您尝试“继承”的对象的引用帮助实现您想要的?您的需求是在基类构造中实现一个副作用,它会影响所有后续派生类构造。至少可以这么说,这是令人困惑的。以面向对象的方式这样做是可能的。您可以编写一个工厂类,其中构造函数接受变量值。创建对象将使用此值创建由工厂创建的。