无法访问具有基类的shared_ptr的派生类的成员
Cannot Access Members of Derived Class with shared_ptr of BaseClass
我有以下代码,我正试图使用shared_ptr
以多态形式使用这些代码。
using namespace std;
class Base
{
public:
int ClassID; // Used only by derived classes
string Name;
shared_ptr<Base> Parent; // For TreeCtrl-like hierarchy
}
class DerivedA : public Base
{
public:
double Length;
double Width;
double Height;
}
class DerivedB: public Base
{
public:
double Radius;
}
class Controller
{
public:
vector<shared_ptr<Base>> Objects;
void CreateObject(int class_id, string name, shared_ptr<Base> parent)
{
shared_ptr<Base> temp;
switch(class_id)
{
case DERIVEDA: // enum definition assumed
temp = make_shared<DerivedA>(name, parent); // constructors assumed
break;
case DERIVEDB:
temp = make_shared<DerivedB>(name, parent);
break;
}
Objects.push_back(temp);
}
}
我的问题是,当我检查多态性是否工作时(使用VS2013的调试器),我只得到Base
类的成员(我的研究表明,我在函数方面也会遇到同样的问题)。使用dynamic_pointer_cast
似乎不起作用。我可以做些什么来访问Derived
类的所有成员?
dynamic_pointer_cast
依靠dynamic_cast
才能正常工作。如果dynamic_cast
不工作,dynamic_pointer_cast
也不工作。
在您的情况下,dynamic_cast
将不起作用,因为Base
没有任何virtual
成员函数。在Base
中添加一个virtual
成员函数,或者使Base
的析构函数成为虚拟析构函数。之后,dynamic_pointer_cast
应该工作。
class Base
{
public:
// Add this.
virtual ~Base() {}
int ClassID; // Used only by derived classes
string Name;
shared_ptr<Base> Parent; // For TreeCtrl-like hierarchy
};
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- 如何使用单独文件中的派生类访问友元函数对象
- 派生类销毁的最佳实践是什么
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 存储模板类型以强制转换回派生<T>
- 需要从 istream 和 ostream 派生 iostream
- 在 C++ 中用派生类型重写成员函数
- 如何将派生类从基 ptr 分配给 nlohmann::json
- C++ 类型转换基础 PTR 到派生 PTR 保存在引用类中
- 通过基类的 ptr 调用派生类的方法
- 如何访问受保护的基类函数,从派生类通过基类ptr
- 基类或派生类:谁应该拥有派生的ptr(指向不同的类)
- 将派生类的ptr类型转换为ptr类型