gpt4 book ai didi

c++ - 派生类可以小于其父类吗?

转载 作者:行者123 更新时间:2023-12-01 14:03:31 27 4
gpt4 key购买 nike

我问这个关于 C++ 的问题,因为我熟悉 C++,但问题确实可以解释自己:是否有一种语言可以派生一个类并使其在内存中占用的空间比原始类少?

这个问题更像是一个噱头,而不是我试图解决的实际问题,但我可以想象一些真正高性能的代码可以从这种内存优化中受益:

假设我们有:

class Person {
std::string name;
unsigned int age;
}

class PersonNamedJared {
}

理论上,我们不需要这个子类中的字段“name”,因为它总是“Jared”,这可以提高内存效率。

是通过替换 Person 中的“名称”字段来实现这一点的唯一方法与 get_name()我们在 PersonNamedJared 中简单地覆盖的函数总是返回“Jared”?我们如何仍然在基类中创建 name 变量?

我知道这个例子是非常糟糕的做法,但这是我能想到的最好的做法。我认为实现这种模式是有正当理由的。

最佳答案

Can a derived class be smaller than its parent class?



否。派生类始终包含基类子对象。一个对象永远不会小于它的子对象,所以派生类永远不会小于它的基类。

Is the only way to make this happen by replacing the 'name' field in Person with a get_name() function that we simply override in PersonNamedJared to always return "Jared"?



那将是实现它的一种方式。

How would we still make the name variable in the base class?



您不能在基类中拥有不想出现在派生类中的成员变量。

例如,您可以使用多重继承,以便在某些派生类中拥有带有变量的基类。像这样的东西:
struct Person {
unsigned int age;
virtual std::string name() = 0;
...

struct Named {
std::string name;
};

struct NamedPerson : Person, private Named {
std::string name() override {
return name;
}
};

struct JaredPerson : Person {
std::string name() override {
return "Jared";
}
};

在这里,变量有一个基数,但 Jared 没有继承那个特定的基数。

关于c++ - 派生类可以小于其父类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61667848/

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