本人使用的是钱能那本《C++程序设计教程》,关于继承这一章,产生了如标题所示的疑惑,具体描述如下:有个class Account的抽象类,其拥有一个静态成员变量static Account *pFirst(是要创建的对象链表的首指针),对象链表的创建也是在Account类中的构造函数完成,它下面有个两个派生类:class Savings ,class Checking,我在程序里既要创建Savings链表,又要创建Checking链表,那么我的问题是:1.pFirst是不是两个对象链表都共享的,即会不会产生,我创建了Savings链表后,pFirst指向它的链首,然后我又创建Checking链表,这时pFirst是不是被覆盖为指向Checking的链首,而Savings这个链表就无从找寻了。当然如果这样的话我可以通过把第一次的指针赋给临时变量来解决,但我的感觉就是,既然我是某个类的派生类,我同样继承了它的成员,包括静态成员,那么这个成员对于我来说就是私有的,而现在还能被别的类更改,岂不有悖于封装的出发点啊?请大哥,大姐,大叔,大娘们帮我解释解释吧!

解决方案 »

  1.   

    pFirst无论你创建了多少个包含它的类实例,该变量也只有一个实例存在,所以创建了Checking后,是否覆盖前一个值就要看你的代码了,如果你给pFirst赋了一个新值肯定会被覆盖了。
    至于封装,其实我个人认为这更多的存在于结构设计,而不是具体的某个编程技术,应该在设计上避免出现这些紧耦合的情况,而不是依靠某个语言帮你做。c++太灵活
      

  2.   

    不是吧 static 是每个类只有一个 saving checkig是2个不同的类  saving 中的更改怎么会影响到checkig中的值呢?
      

  3.   

    为什么我老认为至少Savings类有一个唯一的pFirst,Checking类也有一个唯一的pFirst,当然他们对各自的对象实例都是唯一的,大侠,为什么我这个想法是错的呢?到底我错在哪啊?噢,我想起来了,是不是Savings类和Checking类都可以先看成Account类,而对于Account类来说,pFirst唯一?不确定啊?是不是我应该让创建对象链表在各自的类里完成,pFirst也在各自的类里定义啊?
      

  4.   

    派生类只要没有重新定义基类的静态成员变量,那么该变量对于所有的派生类来说也是共享的这很符合static的以及继承的概念啊