Polymoprhism - 子类共享基类私有成员

jav*_*ava 1 c++ polymorphism

为什么子类不使用polymoprhism在超类中共享相同的私有成员变量?只有一个基类实例,如果SubA通过mutator设置私有成员 - 那么为什么SubB不能访问该值.如果我希望子类共享同一个私有成员,它会是什么样子?

 #include <iostream>
class Super {

   private:
     int cnt;
   public:
     int getCnt() {
        return cnt;
     }
     void setCnt(int cnt) {
        this->cnt = cnt;
     }
};

class SubA: public Super {

};

class SubB: public Super {

};

int main() {

  Super *super;
  SubA a;
  SubB b;

  super = &a;
  super->setCnt(10);
  super = &b;
  std::cout << super->getCnt() << std::endl;
  super = &a;
  std::cout << super->getCnt() << std::endl;

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

生产:

-8589546555 (garbage)
10
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 5

只有一个基类实例和SubA

那是错的.a并且b不同的对象.它们每个都有一个A子对象的实例.你还没有cnt进入b,所以看它会给你一个垃圾值也就不足为奇了,因为从未初始化的对象中读取是未定义的行为.

如果我希望子类共享同一个私有成员,它会是什么样子?

您可以为基类提供static数据成员.这意味着所有实例A将共享同一个成员.