c++ - 如何从基对象的派生类访问函数
问题描述
我有一个带有对象的向量数组,我用一些相同的对象填充了它,但我也用一些从基础对象派生的对象填充了它。但我无法访问数组中派生对象的函数。是否可以访问它?
vector<BaseObject*> objects;
if (type == 1)
{
objects.push_back(new DerivedObject(var1, var2, var3));
}
else
{
objects.push_back(new BaseObject(var1, var2));
}
objects[index]->GetFunctionOnDerivedClass(); // How to do this
解决方案
以下示例演示了如何使用基本多态性:
#include <iostream>
#include <vector>
class BaseObject {
public:
int var1;
int var2;
BaseObject(int var1, int var2) : var1{var1}, var2{var2} {}
virtual void print() const {
std::cout << "BaseObject{var1=" << var1 << ",var2=" << var2 << "}\n";
}
};
class DerivedObject : public BaseObject {
public:
int var3;
DerivedObject(int var1, int var2, int var3) : BaseObject(var1,var2), var3{var3} {}
void print() const {
std::cout << "DerivedObject{var1=" << var1 << ",var2=" << var2 << ",var3=" << var3 << "}\n";
}
};
int main() {
constexpr int var1 = 1;
constexpr int var2 = 2;
constexpr int var3 = 3;
std::vector<BaseObject*> objects;
objects.push_back(new DerivedObject(var1, var2, var3));
objects.push_back(new BaseObject(var1, var2));
objects[0]->print();
objects[1]->print();
}
这将作为输出
DerivedObject{var1=1,var2=2,var3=3}
BaseObject{var1=1,var2=2}
See Example in CompilerExplorer See Example using smart-pointer in CompilerExplorer
推荐阅读
- python - 过滤和排序列表提示问题 - Python3
- reactjs - 为什么即使添加 onChange 功能后我的输入字段也无法编辑 - 反应
- html - 修复内部资源管理器中的 CSS 阴影问题
- java - 为什么我不能将 apache.thrift 导入 IntelliJ 项目?
- lua - 我的 roblox gamepass gui 有问题
- c++ - 在 C++ 中定义纯虚方法有什么好处?
- javascript - 我正在尝试显示加密货币的信息
- linux - 如何使用 ffmpeg 分段 1080p 视频到 1080p、720p、360p ts 文件分段,每个分段中都有 index.m3u8 和主 m3u8 文件?
- php - 如何阅读下面的 Json 数据键和值个体?
- ios15 - 与 xcode 中的调试器失去连接