标签:
首先上图,咱们看图说话!
橙色表示变量,使用private修饰。
如图,假设Person类的变量name只能通过input方法来输入。
那么继承自Person的Student及Teacher类中s_input、t_input函数都将通过调用Person中的p_input方法来实现name变量的输入。
此时通过virtual继承方式,StuTeach类中只有Person的一份拷贝。
那么在StuTeach的类中的input方法,我们需要分别调用Student及Teacher的类中s_input、t_input来实现num及subject等变量的输入。显然此时Person类中的input方法被执行了两次。
那么我们接下来想一下是什么地方设计的不合理或者不符合逻辑?
在Student类中需要输入其父类的变量,我们显然想到且只能调用input方法来改变其中的private修饰的变量。
Teacher类同理,此时貌似唯一的解决方案就是将Person类中的name修改为用protected修饰,然后在StuTeach中直接修改其变量,此时StuTeach需要知道其根父类Person的内容。
另外一种方法,针对变量加入set/get方法,这个时候依然需要StuTeach类了解根父类Person的内容方可达到。
因为都需要通过根父类来操作根父类的变量,所以这两种方法,我认为没有本质上的区别。
那么我们是否有其他方式来解决多重继承带来的根父类数据的迷之操作困难?
目前我尚未有答案。
C++多重继承带来的问题
标签:
原文地址:http://www.cnblogs.com/fireboss/p/5404999.html