我有一个基本基类和几个继承自它的子类。
Class Base{
public:
Base(){};
virtual ~Base();
virtual void foomethod()=0; //Marked as pure virtual
};
Class A : public Base{
A(){}; //Ctor
~A(){}; //Dtor
void foomethod(){ /* DO SOMETHING */ }
}
Class B : public Base{
B(){}; //Ctor
~B(){}; //Dtor
void foomethod(){ /* DO SOMETHING */ }
}以上使用将引发以下使用中的错误:
Base a = A();
Base b = B();编译器抱怨foomethod()函数是纯虚拟的。
但是,当使用以下内容时,没有问题。
A a = A();
B b = B();我认为,由于C++的多态原则,第一个实例应该被接受。我希望在子类中强制执行该方法的特定方法实现。如果它仅被标记为虚拟,则不能保证它将被显式覆盖。
发布于 2014-06-22 07:56:05
在您的代码中有几个问题,我将尝试获得其中的大部分:
Base类的对象(方法没有代码)Base b对象。这是不可能的,因为Base是抽象的,但是在可能发生这种情况的情况下,您可以体验slicing problem。Base中没有标记(也没有定义),在使用虚拟多态性时始终将其标记为virtual,否则派生析构函数将不会被调用。这是一种更正确的做法:
#include <iostream>
using namespace std;
class Base{
public:
Base(){};
virtual ~Base() {};
virtual void foomethod()=0; //Marked as pure virtual
};
class A : public Base{
public:
A(){}; //Ctor
virtual ~A(){}; //Dtor
void foomethod(){ cout << "Hello from A"; }
};
class B : public Base{
public:
B(){}; //Ctor
virtual ~B(){}; //Dtor
void foomethod(){ /* DO SOMETHING */ }
};
int main() {
// Base obj; // Can't do that
Base *obj = new A();
obj->foomethod(); // A's one
delete obj;
return 0;
}http://ideone.com/gvcL9S
哦,还有一些语法错误。还有一个可见性问题,如果你打算从外部使用这些函数..。但我相信摘录只是个伪代码。
https://stackoverflow.com/questions/24349183
复制相似问题