从子类中调用超类
Calling superclass from within subclass
在以下情况下,我如何才能从SubClass
的构造函数中调用SuperClass
的参数化构造函数?
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() {
//...
};
};
SuperClass
中是否应该有一个构造函数(假设它是抽象的),或者我应该将成员初始化代码移动到一个单独的函数中,比如SuperClass
中的init( ... )
?在这种情况下,我将如何从SubClass
中调用此函数?
调用SubClass
:初始值设定项列表中的SuperClass
构造函数
class SubClass : public SuperClass {
int subMember;
// Made constructor 'public'.
public:
SubClass(int a_superMember, int a_subMember) : SuperClass(a_superMember),
subMember(a_subMember) {}
};
即使SuperClass
是抽象的,它仍然需要一个构造函数,在这种情况下初始化superMember
。
在SuperClass
中,构造函数必须对SubClass
可见:public
或protected
:
class SuperClass {
int superMember;
public: // or protected:
SuperClass( int superMember ) {
this->superMember = superMember;
};
virtual void doStuff() = 0;
};
基类的初始化应该这样完成:
SubClass( int superMember, int subMember ) : SuperClass( superMember) {
this->subMember = subMember;
}
你甚至还为成员使用了一个初始化列表
SubClass( int superMember, int subMember_ ) :
SuperClass( superMember), subMember(subMember_){}
(注意}
后不需要分号)
但在此之前,您需要像一样从Superclass
继承
class SubClass : public SuperClass {/*...*/}
(如果我理解你的意图)
之后,您需要指定方法和构造函数的访问级别,我认为它们应该是public
。
我在下面编写了调用参数化构造函数的代码。在参数化构造函数本身中进行初始化总是更好的。您还应该记住的一件事是,如果您的继承是私有的,那么您就不能使用init()函数。
class SuperClass {
int superMember;
SuperClass( int superMember ) {
this->superMember = superMember;
};
virtual void doStuff() = 0;
};
class SubClass :public/private/protected SuperClass
{
int subMember;
SubClass( int superMember, int subMember ) :superClass(superMember)
{this->subMember=subMember;
};
void doStuff() {
//...
};
};
希望这对你有帮助。
相关文章:
- 在从给定超类继承的所有类上调用虚函数
- 按值将对象传递给 SubClass 构造函数,导致超类的构造函数不调用
- 将 void* 强制转换为多个继承类的超类不会调用正确的方法
- 我可以从我的超类调用子类构造函数吗?
- C++ 如何使用一个参数从派生类构造函数中调用具有两个参数的超类构造函数
- 如何在 c++ 中从模板基类的构造函数调用模板超类的构造函数?
- 子类/超类的"无匹配函数调用"
- 从构造函数的主体调用超类构造函数
- 调用超类函数继承 c++
- C ++如何使用子类调用函数,具有超类指针
- 在子类的构造函数中调用超类的构造器两次
- 超类和子类,不同的函数调用取决于子类
- 调用子重写时,始终调用超类虚拟函数
- C++调用同一虚拟函数的超类函数
- C++调用模板化超类的继承方法
- 从超类调用子类的方法
- 为什么超类 B 调用子类 A 的方法?
- 超类调用子类方法的STL迭代器
- 从vector的超类调用子类方法
- 从超类调用子类方法