gpt4 book ai didi

c++ - 父类范围内的子类

转载 作者:行者123 更新时间:2023-11-30 04:58:20 24 4
gpt4 key购买 nike

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 的实例。 childparent 的范围内,可以作为 parent::child 访问。这段代码编译得很好,但我担心它可能有问题。由于 child 继承自 parent,它也继承了 child 声明,不是吗?一般来说,在 parent 类的范围内声明 child 类是否可以?

最佳答案

使用 child 作为 parent 的嵌套类型是个坏主意。

在你说的评论中

For example my class apple inherits from fruit. I want it to be accessible as fruit::apple as apple alone is too confusing (umm, is apple a company? Confused already). child is in scope of parent. Any reasons it is a bad idea? Or what should I do instead?

现在您要添加orange 作为fruit 的子类型。为了与 apple 保持一致,您还必须将 orange 设为 fruit 的嵌套类型。每次需要 fruit 的新子类型时,您都必须修改 fruit。这违反了面向对象设计的最重要原则之一 - The Open Closed Principle .

区分 apple the fruit 和 apple the company will 的更好方法是使用命名空间。

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

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

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

关于c++ - 父类范围内的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51695659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com