设为首页 加入收藏

TOP

4.10 本章实例--类的使用
2013-10-07 01:18:50 来源: 作者: 【 】 浏览:63
Tags:4.10 本章 实例 使用

4.10  本章实例--类的使用

前面介绍了继承、多态和重载的基本概念和使用方法。C++(www.cppentry.com)作为面向对象的程序设计语言,继承、多态和重载的出现使C++(www.cppentry.com)面向对象的特点体现的更加明确。本节给出几个例子。

【示例4.26】 创建复数类,利用运算符重载,实现其加法和减法。

  1. #include <iostream.h>  
  2. class complex                               //定义一个复数类  
  3. {  
  4. public:  
  5. complex(double xx = 0.0, double yy = 0.0)   //默认参数的构造函数  
  6. {x = xx;y = yy;}  
  7.     complex operator+(complex);             //重载运算符  
  8.     complex operator-(complex);  
  9.     void show();  
  10. private:  
  11.     double x;  
  12.     double y;  
  13. };  
  14. complex complex::operator+(complex b)       //重载运算符+  
  15. {  
  16.     complex a;  
  17.     a.x = x+b.x;  
  18.     a.y = y+b.y;  
  19.     return a;  
  20. }  
  21. complex complex::operator-(complex b)       //重载运算符-  
  22. {  
  23.     complex a;  
  24.     a.x = x-b.x;  
  25.     a.y = y-b.y;  
  26.     return a;  
  27. }  
  28. void complex::show()                        //成员函数  
  29. {  
  30.     if(y>=0)  
  31.         cout<<x<<"+"<<y<<"j"<<endl;         //输出变量  
  32.     else 
  33.         cout<<x<<y<<"j"<<endl;  
  34. }  
  35. void main()  
  36. {  
  37.     complex a(1.1, 1.2);                    //定义对象a  
  38.     complex b(2.1, 2.2);                    //定义对象b  
  39.     complex c;                              //定义对象c,使用默认参数  
  40.     c = a+b;                                    //使用运算符重载+  
  41.     cout<<"a = ";  
  42.     a.show();  
  43.     cout<<"b = ";  
  44.     b.show();  
  45.     cout<<"c = a+b =";  
  46.     c.show();  
  47.     c = a-b;                                    //使用运算符重载-  
  48.     cout<<"c = a-b =";  
  49.     c.show();  

程序输出如下所示。

  1. a=1.1+1.2j  
  2. b=2.1+2.2j  
  3. c=a+b=3.2+3.4j  
  4. c=a-b=-1-1j 

分析:上面介绍了一个使用运算符重载进行程序设计的例子。运算符重载可以实现编译时的多态性,也就是在编译阶段实现多态性的选择。运算符重载仅仅可以实现编译时的多态性,并不能在程序执行时进行多态性。下面的例子中将利用抽象类实现运行时的多态性。

【示例4.27】 创建抽象类circle,利用纯虚函数求解圆的内接正方形面积和周长。

  1. #include"iostream.h"  
  2. class circle                                //定义类  
  3. {  
  4. public:  
  5.     void set(double x)  
  6.     {r=x;}  
  7.     virtual double area()=0;            //纯虚函数  
  8.     virtual double length()=0;          //纯虚函数  
  9. protected:  
  10.     double r;  
  11. };  
  12. class square:public circle              //派生类  
  13. {  
  14. public:  
  15.     double area()                       //成员函数  
  16.     {return 2*r*r;}  
  17.     double length()  
  18.     {return 4*1.414*r;}  
  19. };  
  20. void main()  
  21. {  
  22.     square op;                          //定义对象  
  23.     op.set(2.68);  
  24.     cout<<"The area is: "<<op.area()<<endl;  
  25.     cout<<"The length is: "<<op.length()<<endl;  

分析:上面是抽象类的具体使用。对于一个拥有纯虚函数的抽象类来说,此虚函数在基类中没有定义,但它要求在派生类中去定义。上面程序的输出结果如下:

  1. The area is: 14.3648  
  2. The length is: 15.1581 

抽象类是一种特殊的类,它是为了抽象和设计的目的而建立的,它处于继承层次结构的较上层。抽象类是不能定义对象的,在实际中为了强调一个类是抽象类,可将该类的构造函数说明为保护的访问控制权限。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.8.1 函数重载 下一篇4.12 常见问题及解答

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: