分页: 1 / 1

猜猜这个结果是什么

发表于 : 2013-04-08 17:33
自由建客
[cpp]#include <iostream>

using namespace std;

class Base {
public:
double Data;
};

class Sub1: public Base {
public:
double Data1;
};

class Sub2: public Base {
public:
int Data2;
};

int main() {
Sub1 s1; s1.Data= 0.1; s1.Data1= 1.1;
Sub1 s12; s12.Data= 0.12; s12.Data1= 1.12;
Sub2 s2; s2.Data= 0.2; s2.Data2= 2;
Base *pb= &s1;
cout << s1.Data << ' ' << s1.Data1 << endl;
*pb= s12;
cout << s1.Data << ' ' << s1.Data1 << endl;
*pb= s2;
cout << s1.Data << ' ' << s1.Data1 << endl;
return 0;
}
[/cpp]
:em09

Re: 猜猜这个结果是什么

发表于 : 2013-04-08 18:10
只是说
擼過。

Sent from my Lenovo_A2105 using Tapatalk 2

Re: 猜猜这个结果是什么

发表于 : 2013-04-08 18:11
YeLee
该死 ,又是这种东西。 :em20 :em20 :em20

Re: 猜猜这个结果是什么

发表于 : 2013-04-08 19:30
自由建客
YeLee, 为什么要说「又」?

Re: 猜猜这个结果是什么

发表于 : 2013-04-08 21:38
YeLee
不过是作为一个门外汉,赞美一下你们千变万化的CPP而已。 :em01

Re: 猜猜这个结果是什么

发表于 : 2013-04-08 22:35
sighforever

代码: 全选

0.1 1.1
0.12 1.1
0.2 1.1
Base *pb= &s1;
已经将Sub1作为Base来看待了,下面的赋值都是都是调用Base的相应函数。

Re: 猜猜这个结果是什么

发表于 : 2013-04-08 23:19
qgymib
最讨厌这种代码了,毫无意义,计算机二级专用

Re: 猜猜这个结果是什么

发表于 : 2013-04-09 12:25
自由建客
qgymib 写了:最讨厌这种代码了,毫无意义,计算机二级专用
是否有意义要看人去。这段代码揭示了一个深层次的哲学问题,给了我初韵一个重大启示,根治泛型的协变、逆变问题。

Re: 猜猜这个结果是什么

发表于 : 2013-04-09 17:37
qgymib
自由建客 写了:这段代码揭示了一个深层次的哲学问题,给了我初韵一个重大启示,根治泛型的协变、逆变问题。
原谅我的鲁莽,我的言论是从平时代码运用上去讲的,没有考虑到学习方面 :em02
在平时编程的时我候极少去用指针的方式进行协变,因为这样的方式使得对指针有恐惧症的人会放弃对这段代码的理解(指针是什么,能吃么)。 :em04