【发布时间】:2018-06-25 09:20:55
【问题描述】:
假设我有一个抽象类,其中包含一个名为print 的函数。假设我有另一个类继承自老类并定义函数print。
可以说老类函数print 永远不会被调用吗?
我的辩论是在我有一个长辈指针指向一个孩子的情况下进行的。我使用这个指针调用print 函数。除非我将函数声明为virtual,否则它应该尝试使用抽象函数。但它不能,这就是我卡住的地方。
提前致谢。
编辑:我添加了一个示例。感谢这个建议,因为它解决了我的问题。不存在非虚拟抽象方法之类的东西。
// Example program
#include <iostream>
using namespace std;
class A{
public:
void print()=0;//I have to add virtual before declaring function
};
void A::print(){
cout<<"1"<<endl;
}
class B: public A{
public:
void print(){cout<<"2"<<endl;}
};
int main(){
B b;
b.print();
A* a=&b;
a->print();
b.A::print();//here I called the abstract method
return 0;
}
【问题讨论】:
-
你在代码上试过了吗?
-
你总是可以明确地调用它,例如
p->Base::foo(); -
等一下。如果你没有
virtual函数,你就不能拥有一个抽象类。至少在“抽象”一词的 C++ 运行时多态意义上不是。你能澄清一下吗?最好有实际代码。 -
阅读文档通常会有所帮助:en.cppreference.com/w/cpp/language/virtual
-
如果你实际使用一些代码进行演示,你的问题会更清楚。
标签: c++ function class abstract