是否曾经在c ++中调用过抽象方法?

时间:2018-06-25 09:20:55

标签: c++ function class abstract

比方说,我有一个抽象类,带有一个名为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;
}

1 个答案:

答案 0 :(得分:0)

  

比方说,我有一个抽象类,带有一个名为“ print”的函数。假设我有另一个继承自父类并定义函数print的类。说“父亲”类函数print将永远不会被调用是正确的吗?

否。

  

我的辩论是在我有一个“父亲”指向“儿子”的情况下。我使用此指针调用打印功能。除非我声明该函数为虚拟函数,否则应尝试使用抽象函数。

对,因此,如果不是virtual,则将调用“父亲”函数(或者至少会尝试这样做)。这回答了您先前的问题。

如果它是virtual,则重写意味着将调用子函数。但是,如果为该函数提供了定义,仍然可以像Father::print()那样调用基本版本(例如,从子版本内部)。

  

但是不能,这就是我被困住的地方。

我不明白你的意思。