父类范围中的子类

child class in scope of parent class

本文关键字:子类 范围 父类      更新时间:2023-10-16
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是一家公司吗?已经困惑了(。childparent的范围内。有什么理由认为这是个坏主意吗?或者我该怎么办?

现在您希望添加orange作为fruit的子类型。为了与child0保持一致,您还必须使orange成为fruit的嵌套类型。每次需要fruit的新子类型时,都必须修改fruit。这违反了面向对象设计最重要的原则之一——开闭原则。

区分苹果(水果(和苹果公司的更好方法是使用名称空间。

namespace products
{
class fruit {};
class apple : public fruit {};
}
namespace organizations
{
class company {};
class apple : public company {};
}

现在你可以用products::apple来指代水果,用organizations::apple来指代公司。