由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 还没被劝退C++的都来看看这个吧
相关主题
C++的"初始化"小结初始化列表问题
simple question on C++ initialization list构造函数里的异常处理
C++构造函数的问题突然想到一个老题,构造函数n多变量初始化
c++类未完成初始化,如何引用this?[c++] 关于构造函数的一个小问题
关于构造函数的一道测试题 (转载)问个构造函数的问题
请教c++数组初始化vector的析构问题
[合集] 关于构造函数make 时候遇到 undefined reference 怎么办?
为啥gcc找不到类的构造函数?初学者问个 C++ constructor 问题吧
相关话题的讨论汇总
话题: c++话题: b2话题: b1话题: 继承话题: 调用
进入Programming版参与讨论
1 (共1页)
w***g
发帖数: 5958
1
你们拿const啥的说事的太弱了。给你们来点真正恶心的。
就是A分别被B1, B2继承,然后C又同时多继承B1, B2。
然后构造C的对象的时候就要分别调用B1和B2的构造函数。
如果不加特殊处理,B1和B2的构造函数又会分别调用A的构造函数。
这样A就被构造了两遍。怎么解决?
如果B1和B2分别重载了A的同一个虚方法,而C又没有重载
这个方法,这时通过C的指针调用的是谁的方法?
如何指定C必须用B2的虚方法?
这种结构有个专门的名字,叫做dreaded diamond。
为了解决多个路径指向同一个基类的问题,专门引入了
virtual inheritance机制。这里面的机制很少有人能弄明白,
而且即使弄明白了要写成代码也会被人骂死。
(Scala的trait有一个类似的机制,但还是不如C++的多继承复杂.)
赶紧趁早都转java去吧。
N******K
发帖数: 10202
2
用多继承是找死行为

【在 w***g 的大作中提到】
: 你们拿const啥的说事的太弱了。给你们来点真正恶心的。
: 就是A分别被B1, B2继承,然后C又同时多继承B1, B2。
: 然后构造C的对象的时候就要分别调用B1和B2的构造函数。
: 如果不加特殊处理,B1和B2的构造函数又会分别调用A的构造函数。
: 这样A就被构造了两遍。怎么解决?
: 如果B1和B2分别重载了A的同一个虚方法,而C又没有重载
: 这个方法,这时通过C的指针调用的是谁的方法?
: 如何指定C必须用B2的虚方法?
: 这种结构有个专门的名字,叫做dreaded diamond。
: 为了解决多个路径指向同一个基类的问题,专门引入了

l*********s
发帖数: 5409
3
scala 's version is very acceptable.
b*******s
发帖数: 5216
4
真是反人类啊,这个也是oo滥用的一个例子
g*****g
发帖数: 34805
5
所以Java干这个还是很干净的,A分别被B1, B2继承实现接口A',C只要实现A'并传入A,
B选择如何组合实现。当然C++也可以按照这个思路改写。
d********u
发帖数: 5383
6
从一个坏的特性就得出一个语言是垃圾?
有点儿失望,千人大系出来的都不会说这话。

【在 w***g 的大作中提到】
: 你们拿const啥的说事的太弱了。给你们来点真正恶心的。
: 就是A分别被B1, B2继承,然后C又同时多继承B1, B2。
: 然后构造C的对象的时候就要分别调用B1和B2的构造函数。
: 如果不加特殊处理,B1和B2的构造函数又会分别调用A的构造函数。
: 这样A就被构造了两遍。怎么解决?
: 如果B1和B2分别重载了A的同一个虚方法,而C又没有重载
: 这个方法,这时通过C的指针调用的是谁的方法?
: 如何指定C必须用B2的虚方法?
: 这种结构有个专门的名字,叫做dreaded diamond。
: 为了解决多个路径指向同一个基类的问题,专门引入了

d****i
发帖数: 4809
7
Gostling在设计Java的时候仔细参照了C++多继承的方案,纠结了好久终于放弃了C++的
多继承而采用了接口。实际生产环境中C++代码里面多继承用的场合很少,很多公司都
不提唱用。

A,

【在 g*****g 的大作中提到】
: 所以Java干这个还是很干净的,A分别被B1, B2继承实现接口A',C只要实现A'并传入A,
: B选择如何组合实现。当然C++也可以按照这个思路改写。

t********e
发帖数: 880
8
搞笑,谁会没事用C++的多重继承
x****k
发帖数: 2932
9
C里有两份A当然有要调用A的constructor twice,如果B1和B2调用的是不同的A的
constructor,那C里也是调用两个不同的A的constructor,这个有什么值得让你抓狂的?

【在 w***g 的大作中提到】
: 你们拿const啥的说事的太弱了。给你们来点真正恶心的。
: 就是A分别被B1, B2继承,然后C又同时多继承B1, B2。
: 然后构造C的对象的时候就要分别调用B1和B2的构造函数。
: 如果不加特殊处理,B1和B2的构造函数又会分别调用A的构造函数。
: 这样A就被构造了两遍。怎么解决?
: 如果B1和B2分别重载了A的同一个虚方法,而C又没有重载
: 这个方法,这时通过C的指针调用的是谁的方法?
: 如何指定C必须用B2的虚方法?
: 这种结构有个专门的名字,叫做dreaded diamond。
: 为了解决多个路径指向同一个基类的问题,专门引入了

D***n
发帖数: 6804
10
多重继承完全不是问题。实际上,如果从仿生角度来说,多重继承还是必须的功能呢。
关键是基本C++继承的思路过于简单粗暴。C++就是这样:有些地方“自动”的要命,有
些地方却又粗枝大叶。
多重继承意味着一件事:就是对继承机制要有更细的指定权力:什么继承,什么不继承
。Virtual只是一个粗浅的解决方案。
Objective-C这方面要更优秀一些。

【在 w***g 的大作中提到】
: 你们拿const啥的说事的太弱了。给你们来点真正恶心的。
: 就是A分别被B1, B2继承,然后C又同时多继承B1, B2。
: 然后构造C的对象的时候就要分别调用B1和B2的构造函数。
: 如果不加特殊处理,B1和B2的构造函数又会分别调用A的构造函数。
: 这样A就被构造了两遍。怎么解决?
: 如果B1和B2分别重载了A的同一个虚方法,而C又没有重载
: 这个方法,这时通过C的指针调用的是谁的方法?
: 如何指定C必须用B2的虚方法?
: 这种结构有个专门的名字,叫做dreaded diamond。
: 为了解决多个路径指向同一个基类的问题,专门引入了

相关主题
请教c++数组初始化初始化列表问题
[合集] 关于构造函数构造函数里的异常处理
为啥gcc找不到类的构造函数?突然想到一个老题,构造函数n多变量初始化
进入Programming版参与讨论
D***n
发帖数: 6804
11
C++的多重继承可以改用Protocol/Delegate
这个例子里面C不用继承B1/B2,而是可以在代码里面在合适的地点直接叫B1/B2某个具
体函数,再把
self/this指针作为一个参数送进去就可以了。
这个方案比C++的多重继承来的好,我经常用这个方法多重继承很多类,没什么问题。

【在 d****i 的大作中提到】
: Gostling在设计Java的时候仔细参照了C++多继承的方案,纠结了好久终于放弃了C++的
: 多继承而采用了接口。实际生产环境中C++代码里面多继承用的场合很少,很多公司都
: 不提唱用。
:
: A,

l*********s
发帖数: 5409
12
学习!

【在 D***n 的大作中提到】
: C++的多重继承可以改用Protocol/Delegate
: 这个例子里面C不用继承B1/B2,而是可以在代码里面在合适的地点直接叫B1/B2某个具
: 体函数,再把
: self/this指针作为一个参数送进去就可以了。
: 这个方案比C++的多重继承来的好,我经常用这个方法多重继承很多类,没什么问题。

j*******e
发帖数: 674
13
多大事儿,还以为抢鸡蛋呢。
c******g
发帖数: 4889
14
学习Protocol/Delegate中……,还是新语言有前途。
c*******9
发帖数: 9032
15
还是能节省代码量,省的用代理方式再调用。当然问题也多。

【在 t********e 的大作中提到】
: 搞笑,谁会没事用C++的多重继承
c*******9
发帖数: 9032
16
re。scala 的trait 很elegant。swift 没有很可惜。

【在 l*********s 的大作中提到】
: scala 's version is very acceptable.
1 (共1页)
进入Programming版参与讨论
相关主题
初学者问个 C++ constructor 问题吧关于构造函数的一道测试题 (转载)
谁能深入浅出的讲讲protocol和delegate的要点?请教c++数组初始化
怎么学习python的函数里面调用函数本身(函数递归)?[合集] 关于构造函数
C++命名空间和算子重载为啥gcc找不到类的构造函数?
C++的"初始化"小结初始化列表问题
simple question on C++ initialization list构造函数里的异常处理
C++构造函数的问题突然想到一个老题,构造函数n多变量初始化
c++类未完成初始化,如何引用this?[c++] 关于构造函数的一个小问题
相关话题的讨论汇总
话题: c++话题: b2话题: b1话题: 继承话题: 调用