c++ - 曾经调用过 c++ 中的抽象方法吗?
问题描述
假设我有一个抽象类,其中包含一个名为print
. 假设我有另一个类继承自老类并定义了 function 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;
}
解决方案
假设我有一个带有一个名为“print”的函数的抽象类。假设我有另一个类继承自父类并定义了函数 print。说永远不会调用“父亲”类函数 print 是否正确?
不。
我的辩论是在我有一个“父亲”指针指向“儿子”的情况下。我使用这个指针调用打印函数。除非我将函数声明为虚拟函数,否则它应该尝试使用抽象函数。
是的,所以如果不是virtual
,“父亲”函数将被调用(或者,至少会尝试这样做)。这回答了你之前的问题。
如果是virtual
,则覆盖意味着将调用子函数。Father::print()
但是,如果为该函数提供了定义,仍然可以调用基本版本(例如,从子版本中) 。
但它不能,这就是我卡住的地方。
我不知道你这个是什么意思。
推荐阅读
- javascript - 防止在 IE v11 上执行第二个块
- java - Intellij 找不到我的 Spring Boot 应用程序
- c# - 获取令牌时如何解决“可能的 System.NullReferenceException”
- sql-server - 关键字 GROUP 附近的语法不正确
- javascript - babel 需要,webpack 没有解决
- javascript - 如何返回 MongoDB 文档以表达路由?
- java - 包含的 XMLBeans .jar 文件使用了错误的 schemaorg_apache_xmlbeans.system.HASH
- scala - 读取 JSON 时的 ValidationException 消息
- java - 使用 selenium 删除 IE 中的地址栏
- node.js - 似乎无法在 sequelize、Node 中设置对同一模型的多个外键引用