carysu@126.com

carysu@126.com
posts - 11, comments - 0, trackbacks - 0, articles - 0
 1 
 2 /*
 3 通过调用基类的指针作为形参的函数来显示桥对象的信息
 4 */
 5 #include <iostream>
 6 #include <string>
 7 using namespace std;
 8 
 9 class cbuilding
10 {
11 
12     string name;
13     //char * name;
14 public:
15     void set(string strName);
16     /*
17     我们在main函数定义了一个派生类的对象,这里用到了基类指针的调用方法,
18     如果我们不加virtual,桥的长度就不能打印出来,
19     从结果上看,长度信息没有输出,所以调用的是基类的display,
20     可见通过指向派生类对象的基类指针来调用派生类对象中覆盖基类的方法是不行的,调用的仍然是基类的方法,
21 
22   我们希望对不同的对象发出相同的消息而产生不同的响应,浙江就是所说的多态,
23   这里用show(相同的消息)分别施加于building和bridge不同的对象
24     */
25     //void display()
26     virtual void display()
27     {
28         cout<<"建筑是"<< name<<endl;
29     }
30 };
31 
32 void cbuilding::set(string str)
33 {
34     name = str;
35 }
36 
37 class bridge:public cbuilding
38 {
39     float bridgeLength;
40 public:
41     void setlength(float length)
42     {
43     bridgeLength = length;
44     }
45     void display()
46     {
47         cbuilding::display();
48         cout<<"桥的长度是"<<bridgeLength<<endl;
49     }
50 };
51 
52 /* 通过指向基类的指针进行显示 */
53 void show(cbuilding *b)
54 {
55     b->display();
56     return;
57 }
58 void main()
59 {
60     bridge b;
61     b.set("杭州钱塘江三桥");
62     b.setlength(200.003);
63     show (&b);
64     return;
65 }

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理