父类范围中的子类
child class in scope of parent class
class parent {
public:
class child; // Is this declaration inherited by parent::child class?
int getval() const;
protected:
parent(int val);
int val;
};
parent::parent(int val) : val(val) {}
int parent::getval() const {
return val;
}
class parent::child : public parent {
public:
child();
};
parent::child::child() : parent(10) {}
int main(){
std::cout << parent::child().getval() << std::endl; // prints out 10 indeed!
return 0;
}
不允许使用parent
的实例。CCD_ 2在CCD_ 3的范围内并且可以作为CCD_。这段代码编译得很好,尽管我担心它可能有问题。由于child
继承自parent
,所以它也继承了child
声明,不是吗?一般来说,在parent
类的范围内声明child
类可以吗?
将child
用作parent
的嵌套类型是个坏主意。
你在评论中说
例如,我的类apple继承自
fruit
。我希望它可以作为fruit::apple
访问,因为apple
本身太令人困惑了(嗯,apple
是一家公司吗?已经困惑了(。child
在parent
的范围内。有什么理由认为这是个坏主意吗?或者我该怎么办?
现在您希望添加orange
作为fruit
的子类型。为了与child
0保持一致,您还必须使orange
成为fruit
的嵌套类型。每次需要fruit
的新子类型时,都必须修改fruit
。这违反了面向对象设计最重要的原则之一——开闭原则。
区分苹果(水果(和苹果公司的更好方法是使用名称空间。
namespace products
{
class fruit {};
class apple : public fruit {};
}
namespace organizations
{
class company {};
class apple : public company {};
}
现在你可以用products::apple
来指代水果,用organizations::apple
来指代公司。
相关文章:
- 继承期间显示未知行为的子类
- 通过指向指针数组的指针访问子类的属性
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 避免在C++中重复子类定义
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- 如何初始化矢量的模板化子类
- 通过函数指针定义类范围之外的方法
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 使用子类覆盖基类中定义的函数
- 子类地址等于虚拟基类地址?
- 将子类方法声明为基类的友元
- C++子类共享变量?
- 如何检查模板专用化是否是基本模板的子类?
- 仅让特定类'Fabric'构造类'Foo'及其所有子类的实例
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 父类范围中的子类
- 子类化 STL 容器:范围构造函数不起作用