类和对象

Posted on 2018-04-16 21:47  旧城旧梦旧少年  阅读(207)  评论(0编辑  收藏  举报

类和对象

一、面向对象程序涉及基本特点

(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 }

运行结果;