Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基类中的数据成员存在于派生类中这一事实是否会导致内存浪费?_C++_Oop - Fatal编程技术网

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确实如此。