C++ 从子类中调用超类
在以下情况下,如何使其能够从C++ 从子类中调用超类,c++,inheritance,virtual,abstract-class,C++,Inheritance,Virtual,Abstract Class,在以下情况下,如何使其能够从子类的构造函数中调用超类的参数化构造函数 class SuperClass { int superMember; SuperClass( int superMember ) { this->superMember = superMember; }; virtual void doStuff() = 0; }; class SubClass : public SuperClass { int sub
子类
的构造函数中调用超类
的参数化构造函数
class SuperClass {
int superMember;
SuperClass( int superMember ) {
this->superMember = superMember;
};
virtual void doStuff() = 0;
};
class SubClass : public SuperClass {
int subMember;
SubClass( int superMember, int subMember ) {
this->subMember = subMember;
SuperClass( superMember );
};
void doStuff() {
//...
};
};
在
超类
中是否应该有一个构造函数(假设它是抽象的),或者我应该将成员初始化代码移动到一个单独的函数中,比如超类
中的init(…)
?在这种情况下,我将如何从子类中调用此函数?基类的初始化应如下所示:
class SuperClass {
int superMember;
SuperClass( int superMember ) {
this->superMember = superMember;
};
virtual void doStuff() = 0;
};
class SubClass : public SuperClass {
int subMember;
SubClass( int superMember, int subMember ) {
this->subMember = subMember;
SuperClass( superMember );
};
void doStuff() {
//...
};
};
SubClass( int superMember, int subMember ) : SuperClass( superMember) {
this->subMember = subMember;
}
您甚至还为成员使用初始化列表
SubClass( int superMember, int subMember_ ) :
SuperClass( superMember), subMember(subMember_){}
(注意,}
后面不需要分号)
但在此之前,您需要像这样从超类继承
class SubClass : public SuperClass {/*...*/}
(如果我正确理解你的意图)
在这之后,您需要指定方法和构造函数的访问级别,我认为它们应该是public
基类的初始化应该这样做:
SubClass( int superMember, int subMember ) : SuperClass( superMember) {
this->subMember = subMember;
}
您甚至还为成员使用初始化列表
SubClass( int superMember, int subMember_ ) :
SuperClass( superMember), subMember(subMember_){}
(注意,}
后面不需要分号)
但在此之前,您需要像这样从超类继承
class SubClass : public SuperClass {/*...*/}
(如果我正确理解你的意图)
在这之后,您需要指定方法和构造函数的访问级别,我认为它们应该是public
调用子类的初始值设定项列表中的超类
构造函数:
class SubClass : public SuperClass {
int subMember;
// Made constructor 'public'.
public:
SubClass(int a_superMember, int a_subMember) : SuperClass(a_superMember),
subMember(a_subMember) {}
};
尽管超类
是抽象的,但它仍然需要构造函数,在本例中,初始化超级成员
在超类
中,构造函数必须对子类
可见:要么公共
要么受保护
:
class SuperClass {
int superMember;
public: // or protected:
SuperClass( int superMember ) {
this->superMember = superMember;
};
virtual void doStuff() = 0;
};
调用子类
的初始值设定项列表中的超类
构造函数:
class SubClass : public SuperClass {
int subMember;
// Made constructor 'public'.
public:
SubClass(int a_superMember, int a_subMember) : SuperClass(a_superMember),
subMember(a_subMember) {}
};
尽管超类
是抽象的,但它仍然需要构造函数,在本例中,初始化超级成员
在超类
中,构造函数必须对子类
可见:要么公共
要么受保护
:
class SuperClass {
int superMember;
public: // or protected:
SuperClass( int superMember ) {
this->superMember = superMember;
};
virtual void doStuff() = 0;
};
我在下面编写了调用参数化构造函数的代码。
最好在参数化构造函数本身中进行初始化。
您应该记住的另一件事是,如果您的继承是私有的,那么您就不能使用init()函数
class SuperClass {
int superMember;
SuperClass( int superMember ) {
this->superMember = superMember;
};
virtual void doStuff() = 0;
};
class SubClass :public/private/protected SuperClass
{
{
此->子成员=子成员
};
void doStuff() {
//...
};
};
希望这能对您有所帮助。我在下面编写了调用参数化构造函数的代码。
最好在参数化构造函数本身中进行初始化。
您应该记住的另一件事是,如果您的继承是私有的,那么您就不能使用init()函数
class SuperClass {
int superMember;
SuperClass( int superMember ) {
this->superMember = superMember;
};
virtual void doStuff() = 0;
};
class SubClass :public/private/protected SuperClass
{
{
此->子成员=子成员
};
void doStuff() {
//...
};
};
希望这对您有所帮助。您是指类子类:公共超类{
?您是指类子类:公共超类{
?