【发布时间】:2017-01-20 08:33:58
【问题描述】:
我有一个纯虚拟基类和一个派生类。我知道我可以在基类中实现一个虚拟(非纯)方法。
我不明白的是为什么我HAVE 还要在派生类中实现相同的方法,如果我想要的只是使用基本实现:
#include <iostream>
using namespace std;
class Abstract {
public:
int x;
Abstract(){
cout << "Abstract constructor" << endl;
x = 1;
}
virtual void foo() = 0;
virtual void bar(){
cout << "Abstract::bar" << endl;
}
};
class Derived : Abstract {
public:
int y;
Derived(int _y):Abstract(){
cout << "Derived constructor" << endl;
}
virtual void foo(){
cout << "Derived::foo" << endl;
}
virtual void bar(){
Abstract::bar();
}
};
int main()
{
cout << "Hello World" << endl;
Derived derived(2);
derived.foo();
derived.bar(); //HERE I HAVE TO DEFINE Derived::bar to use it
return 0;
}
【问题讨论】:
-
如果我不实现
Derived::bar它不会编译 -
阅读私有继承。
-
您正在使用
private继承。这使得基类中的public方法在派生类中变为private。你必须使用public继承,你可以做你想做的事 -
为什么这个问题被否决了这么多?这是一个合理的问题,有一个很小的例子说明了这一点。
-
@statquant:不必重新实现
Derived::bar。它是关于通过Derived使其可访问。您通过使用 private 继承使其无法访问。您的重新实现解决了这种不可访问性。但是,如果您从一开始就使其可访问,则不需要这种解决方法。
标签: c++ virtual pure-virtual