类和对象
一、面向对象程序涉及基本特点
(1)抽象:指对具体问题(对象)进行概括,抽出一类对象的公共性
质并加以描述的过程。
(2)封装:将抽象得到的数据和行为相结合,形成一个有机的整体,
也就是将数据与操作数据的函数代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
(3)继承:C++语言中提供了类的继承机制,允许程序员在保持原有
类特性的基础上,进行更具体更详细的说明。
(4)多态:指一段程序能够处理多种类型对象的能力。在C++语言中
这种多态性可以通过强制多态、重载多态、类型参数化多态、包含多态4种形式来实现。
二、类和对象
(1)在类的定义过程中,不使用public与private声明的话,类中的数据和成员函数都默认为私有的。
(2)类中的成员限定访问符:public与private是可以多次出现的,而且不限定先后顺序。
(3)C++继承和发展了C语言中的结构体类型,该类型在C语言知识数据的合集,在C++中加入了函数。所以这样的扩展让结构体类型具有了与类相似的功能(数据和函数),C++允许用struct去声明一个类,但是与class相比,前者不用成员限定访问符声明时都默认为公用的。
(4)类的成员函数是可以在类外定义的,但是要注意两点:需要在类内声明,定义时需要加上类名。
(5)在类体内定义函数时,如果该函数不包含循环等控制结构(也就是说该函数比较短小),那么C++系统将自动将它定义为内置函数。
三、结构体和内联体
(1)结构体和共用体都属于自定义类型。支持把逻辑上相互关联
,数据和操作放在一起。
(2)与C相比,C++中的结构体类型名不需要关键字struct,内部可以有成员函数。与类相比,结构体中的成员默认访问权限为public。
(3)与C相比,C++中的联合体类型名不需要关键字union,内部可以有成员函数。与C++中结构体相比,C++中联合体中的数据成员共享一组内存单元。
四、例题练习。
例4-3 游泳池改造预算,Circle类。
一圆形游泳池,现在需在其周围建一圆形过道,并在其四周围上栅栏。栅栏价格为35元/米,过道造价为20元/平方米。过道宽度为3米,游泳池半径由键盘输入。要求编程计算并输出过道和栅栏的造价。
分析:游泳池边界和栅栏可以看作同心圆,R2-R1=3。而过道的面积为以R2为半径的圆的面积减去以半径为R1的圆的面积。而过道的价格为面积乘单价,栅栏的价格为半径为R2圆的周长乘单价。
Code:
1 #include<iostream> 2 using namespace std; 3 4 const float PI=3.141593; 5 const float FENCE_PRICE=35; 6 const float CONCRETE_PRICE=20; 7 8 class Circle{ 9 public: 10 Circle(float r); 11 float circumference(); 12 float area();//预先声明函数// 13 private: 14 float radius; 15 }; 16 17 Circle::Circle(float r){ 18 radius=r; 19 } 20 21 float Circle::circumference(){//计算圆的周长// 22 return 2*PI*radius; 23 } 24 25 float Circle::area(){//计算圆的面积// 26 return PI*radius*radius; 27 } 28 29 int main(){ 30 float radius; 31 cout<<"Enter the radius of the pool: "; 32 cin>>radius; 33 Circle pool(radius);//泳池边界对象// 34 Circle poolRim(radius+3);//栅栏对象// 35 36 float fenceCost=poolRim.circumference()*FENCE_PRICE;//计算栅栏造价// 37 cout<<"Fencing Cost is $"<<fenceCost<<endl;//输出栅栏造价// 38 39 float concreteCost=(poolRim.area()-pool.area())*CONCRETE_PRICE;//计算过道造价// 40 cout<<"Concrete Cost is $"<<concreteCost<<endl;//输出过道造价// 41 42 return 0; 43 }
运行结果;