c++ - 为什么我的虚拟功能“独特”也不工作?
问题描述
我的基类中有两个虚拟函数,但其中一个不起作用。我不知道它有什么问题。有人会帮我吗?
我尝试将虚拟方法“唯一”更改为纯虚拟方法,它会引发错误,提示“未定义纯虚拟函数”。“打印”似乎工作正常,但“独特”不起作用。
#include <iostream>
#include "polymor.h"
void print (std::vector<Base *> b)
{
for (int i = 0; i < b.size(); ++i)
{
b[i]->print();
b[i]->unique();
}
}
int main()
{
std::vector< Base * > pointers;
Base * b1 = new Derived1();
Base * b2 = new Derived2();
pointers.push_back(b1);
pointers.push_back(b2);
print (pointers);
return 0;
}
//polymor.h:
#ifndef POLYMOR_H
#define POLYMOR_H
#include <iostream>
class Base
{
public:
virtual void print()
{
std::cout << "Base\n";
}
virtual void unique()
{
std::cout << "BaseUnique\n";
};
};
class Derived1: public Base
{
public:
void print()
{
std::cout << "Derived1\n";
}
void unqiue()
{
std::cout << "Der1Unique\n";
}
};
class Derived2: public Base
{
void unqiue()
{
std::cout << "Der2Unique\n";
}
};
#endif```
This is my output:
Derived1
BaseUnique
Base
BaseUnique
解决方案
您的派生类中有错字 - 请注意“唯一”拼写错误。
快速诊断此类问题的好方法:使用override
修饰符标记所有应该被覆盖的成员函数。那样的话,如果你犯了这样的错字,编译器会将其标记为错误,而不是导致奇怪的运行时问题。例如,这不会编译:
void unqiue() override // Nothing named "unqiue" to override
{
std::cout << "Der1Unique\n";
}
推荐阅读
- python - 如何在 Tensorflow 中禁用回溯
- android - 网络安全配置导致 React Native 应用程序未连接到 Metro 服务器
- c# - 如何将 PlayFab 的 UserDataRecord 转换为字符串数组
- sql - 如何在 SQLite Flutter 数据库中保存日期?
- javascript - CSS & JS 在按钮悬停时更改 div 背景颜色?
- linux - 使用 SSHFS 在 Windows 10 中挂载 Linux FS
- python - 在 dash 应用程序中集成 pandas-profiling 报告
- apache-kafka - 有没有办法让任何 2 个消费者代理实例不会同时处理具有相同“域”值的消息?
- r - 如何将汇总列添加到作为其他两个汇总列的函数的 gt 表中?
- git - 如何排除文件夹 .gitignore