比方说,我有一个抽象类,带有一个名为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;
}
答案 0 :(得分:0)
比方说,我有一个抽象类,带有一个名为“ print”的函数。假设我有另一个继承自父类并定义函数print的类。说“父亲”类函数print将永远不会被调用是正确的吗?
否。
我的辩论是在我有一个“父亲”指向“儿子”的情况下。我使用此指针调用打印功能。除非我声明该函数为虚拟函数,否则应尝试使用抽象函数。
对,因此,如果不是virtual
,则将调用“父亲”函数(或者至少会尝试这样做)。这回答了您先前的问题。
如果它是virtual
,则重写意味着将调用子函数。但是,如果为该函数提供了定义,仍然可以像Father::print()
那样调用基本版本(例如,从子版本内部)。
但是不能,这就是我被困住的地方。
我不明白你的意思。