c++ - 在指向各种 Person 实例的 unique_ptrs 向量中访问名为 Truck 的派生类的成员函数的语法是什么?
问题描述
举个具体的例子,假设我被给予
vector<shared_ptr<DClass>> cVector
而DClass(派生自MyClass)有如下接口
class DClass: public MyClass {
public:
DClass( string id, string name, int p, int v )
: MyClass id, name, p ), var1_ ( v ) {}
int GetDClassVar1() const { return var1_; }
private:
int var1_;
};
和 MyClass (其中 DClass 继承自)具有以下接口
class MyClass {
public:
MyClass( string id, string name, int p )
: id_( id ), name_( name ), myclassvar1__( p ) {}
string GetMyClassID() const { return id_; }
string GetMyClassName() const { return name_; }
int GetMyClassVar1() const { return myclassvar1__; }
virtual int GetDClassVar1() const { return 0; }
protected:
string id_;
string name_;
int myclassvar1_;
};
假设已填充 cVector,我如何使用 cVector 调用 GetDClassVar1 函数?
***编辑我尝试使用
cVector.at(1).GetDClassVar1.()
我得到了错误
const value_type’ {aka ‘const class std::shared_ptr<MyClass>’} has no member
named ‘GetDClassVar1'
解决方案
假设 cVector 已填充,我如何使用 cVector 调用 GetDClassVar1 函数
for (const auto& d : cVector)
std::cout << d->GetDClassVar1() << "\n";
请注意,当调用非const
-qualified 成员函数时,您需要删除const
before auto&
。对于单个元素:
cVector.front()->getDClassVar1();
cVector.at(42)->getDClassVar1();
这种语法是由于具有转发到底层指针std::shared_ptr
的重载成员函数这一事实。operator ->
另请注意,您希望多态基类具有virtual
析构函数,请参见此处。
推荐阅读
- python - 在 django 3.0 中发送异步电子邮件
- python-3.x - 我用 opencv-python 检测到照片中的眩光点。我怎样才能删除它们?
- java - 如何使用 OOP 进行改造调用?
- c++ - c++'double'值之间的差异与预期值不匹配
- kframework - 编译器:没有为排序 Optional[KVar] 定义新生成器
- python - 超出 os.walk 的索引
- c# - 如何确定 rank 1 数组是向量还是多维数组?
- java - 以编程方式更改模型纹理 libgdx
- java - 模块化 JavaFX 导致子目录类加载失败
- javascript - 我可以使用 ElectronJS 来制作我的 NodeJS 代码的 GUI 吗?