c++ - C++中的嵌套类、继承和共享指针
问题描述
显然,下面的程序在返回表达式中失败了:
#include <memory>
class Base {
public:
class Nested {
public:
int c;
};
};
class A : public Base {
public:
class Nested : public Base::Nested {
public:
int c = 1;
};
};
class B : public Base {
public:
class Nested : public Base::Nested {
public:
int c = 2;
};
};
int main() {
std::shared_ptr<Base> X = std::make_shared<A>();
return X::Nested.c;
};
如何获得X 的Nested.c值?
换句话说,我有一个基类(Base)和两个派生类(A和B)。每个派生类都有一个嵌套类(Nested)。我想从实例X调用Nested.c ,该实例被动态选择为派生类之一。
解决方案
可能只是对嵌套类的误解。嵌套类不会神奇地将成员添加到它的父类。您需要手动执行此操作,例如:
class Base {
public:
class Nested {
public:
int c;
};
Nested nested; // member of nested class Base::Nested.
};
请记住Base::Nested
,A::Nested
和B::Nested
都是不同的类。尽管它们看起来很相似,但它们根本没有关系。
也许以下是您想要的:
#include <memory>
class Base {
private:
class Nested {
public:
int c;
};
Nested nested; // member of nested class Base::Nested.
public:
virtual int getC() const { return this->nested.c; }
};
class A : public Base {
private:
class Nested {
public:
int c = 1;
};
Nested nested; // member of nested class A::Nested.
public:
int getC() const override { return this->nested.c; }
};
class B : public Base {
private:
class Nested {
public:
int c = 2;
};
Nested nested; // member of nested class B::Nested.
public:
int getC() const override { return this->nested.c; }
};
int main() {
std::shared_ptr<Base> X = std::make_shared<B>();
return (*X).getC();
};
每个类都有它自己的嵌套类的成员,并返回c
一个虚拟的 getter。
推荐阅读
- r - 如何从一个 lmer 模型中提取所有非参考水平连续变量系数的置信区间?
- php - 在具有不同对象的单个数组中获取 API 响应
- wordpress - 如何知道 yoast seo 图片是否上传并在 wordpress 中为 og:image 添加条件
- mysql - MySQL 每个查询/子查询是否只使用一个索引?
- schema - HCL OneTest Data 的重新生成功能能否以相同的顺序生成测试数据结果?
- python - 如何优雅地计算多日期数据框的百分比变化率?
- sql - Split Overlapping\Merged Dates in SQL
- javascript - 如何将我在 flickity js 中的整个代码包装成一个函数?
- python - Django - 系统在哪里确定“表单”是身份验证表单?
- visual-studio-code - Visual Studio 代码 - 按名称打开下一个文件的快捷方式