y**b 发帖数: 10166 | 1 父类B,子类D,用父类指针进行操作实现多态B *pB1 = new D;
现在想复制一个子类对象来做其它用途,B *PB2 = new B(*PB1),
但是这样得到的PB2显然被截短了?
若改成new D(*PB1)则编译都通不过。 |
p***o 发帖数: 1252 | 2 父类要加一个虚函数clone
【在 y**b 的大作中提到】 : 父类B,子类D,用父类指针进行操作实现多态B *pB1 = new D; : 现在想复制一个子类对象来做其它用途,B *PB2 = new B(*PB1), : 但是这样得到的PB2显然被截短了? : 若改成new D(*PB1)则编译都通不过。
|
y**b 发帖数: 10166 | |
c*******1 发帖数: 460 | 4 定义一个COPY CONSTRUCTOR.
【在 y**b 的大作中提到】 : 父类B,子类D,用父类指针进行操作实现多态B *pB1 = new D; : 现在想复制一个子类对象来做其它用途,B *PB2 = new B(*PB1), : 但是这样得到的PB2显然被截短了? : 若改成new D(*PB1)则编译都通不过。
|
h**********c 发帖数: 4120 | 5 这在qt里用mirror来解决的吧,在java里就是reflection. you can check an object
reference's rock bottom class name. |
y**b 发帖数: 10166 | 6 我用的C++,按pptwo的提示很快解决了。
java里面有更好的办法? |
p***o 发帖数: 1252 | 7 java自带clone。
【在 y**b 的大作中提到】 : 我用的C++,按pptwo的提示很快解决了。 : java里面有更好的办法?
|
z*y 发帖数: 1311 | 8 Can you just cast?
B *pB2 = new D(*((D*)pB1)); |
g*****y 发帖数: 7271 | 9 pB1 可以指向各种派生类,D1,D2,。。。
你没办法预先知道该cast成啥。
【在 z*y 的大作中提到】 : Can you just cast? : B *pB2 = new D(*((D*)pB1));
|
h**********c 发帖数: 4120 | 10 Java reflection makes sure you can enumerate three things of an object's
class,
all member variables, all member functions defined, the other one forgot. |
y**b 发帖数: 10166 | 11 嗯。不过语法可行?
还是虚函数clone好。
【在 g*****y 的大作中提到】 : pB1 可以指向各种派生类,D1,D2,。。。 : 你没办法预先知道该cast成啥。
|
p***o 发帖数: 1252 | 12 clone这个标准做法20多年前就有共识,不说java直接设计成这样,
C++里还有covariant return type这样的语言特性来支持。
【在 y**b 的大作中提到】 : 嗯。不过语法可行? : 还是虚函数clone好。
|