C++ 基类中的数据成员存在于派生类中这一事实是否会导致内存浪费?
考虑以下代码:C++ 基类中的数据成员存在于派生类中这一事实是否会导致内存浪费?,c++,oop,C++,Oop,考虑以下代码: class A { private: int a,b; public: void getA(){ cout << a << b; } void setA(int n1,int n2){ a = n1; b = n2; } }; class B : public A { private: int c; }; int main(){ B b1; b1.setA(); b1.getA(); return
class A
{
private:
int a,b;
public:
void getA(){ cout << a << b; }
void setA(int n1,int n2){ a = n1; b = n2; }
};
class B : public A
{
private:
int c;
};
int main(){
B b1;
b1.setA();
b1.getA();
return 0;
}
报表B b1;创建对象,消耗类a中声明的int a和b的内存。如果我只想使用b,那么与a相关的内存就会被浪费。这不会导致内存浪费吗;特别是在大型程序中?公共继承模型是一种Is-A关系,因此,如果B是A,它必须拥有A所拥有的一切,包括数据、类型、函数等。。。如果你说B只需要访问B而不需要访问a,这意味着设计是错误的,你不应该首先使用继承 继承是一种关系。任何B都是A,然后是一些。如果B只使用某个对象的某些成员,则只考虑将该成员传递为参数或解耦B,并使用指向内部A的指针。不要使用继承来更容易地访问成员。
所以答案是肯定的,这是一种内存浪费,但这仅仅是因为它的设计很差。好吧,如果派生类中不需要基类的所有成员,那么肯定会有内存浪费
人们可能应该这样编码,以减少这样的内存浪费。b1.setA;如果b没有访问A::A的权限该怎么办?是和否,因为这意味着类层次结构设计得很糟糕。不,我想在我的派生类中使用其中的一些,但不是所有,我的观点是,这不会导致内存浪费吗。虽然C++程序员有一定的经验,但问题本身并不算差。我不懂-6。我们不要阻止这种性质的问题。另一种选择是将公共部分重构成一个类,然后a和B都将从中派生出来。@Angew只有在设计明智的情况下才有意义。不要只为使用公共部分而设计类和继承—根据逻辑上是否合理做出决定。@LuchianGrigore确实如此。