只言片语

:D 获取中...


C艹中的面向对象编程

面向对象程序的基本设计特点

  1. 抽象

    抽象是指具体问题或者对象进行概括,抽出其公共性质并加以描述的过程。一般情况下抽象分为数据抽象和行为抽象,其中数据抽象是指一个对象区别于另一个对象的特征,行为抽象是指某类对象的共同特征。

  2. 封装

    封装是指将抽象所得的数据和行为相结合,隐藏对象属性和实现细节仅对外提供公共访问方式的过程。

  1. 继承

    继承是指通过代码复用在保持原有的类特性的基础上对子类进行具体说明的过程,通俗来讲继承就是精简重复代码的手段.

  2. 多态

    多态是指一段程序能够处理多种类型对象的能力,函数重载就是实现多态的一种手段。在C++语言中多态可分为强制多态,重载多态,类型参数化多态和包含多态.

类是 C++ 语言支持面向对象思想的重要机制,是实现封装的基本单元。

  1. 类的定义

类一般由类名、数据成员、函数成员三部分组成,定义类的基本形式为:

1
2
3
4
5
6
7
8
9
class 类的名称
{
public
外部接口
protected
保护性成员
private
私有成员
}

其中 public、protected、private 表示访问控制属性,用于控制类成员的访问权限。特别的,没有分配控制属性的默认为 private 私有成员。

2.类的成员访问控制

使用 public 关键字声明的公有成员可在类外访问,即公有类型成员定义了外部接口。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "iostream"
using namespace std;
//定义类
class area{
//公有类成员
public:
double width,length;
};
int main(){
area area1; //定义对象area1
double AREA; //定义double类型变量AREA
area1.width = 3; //外部访问public成员并赋值
area1.length = 3.1; //外部访问public成员并赋值
AREA = area1.length * area1.width; //计算面积
cout << "area:" << AREA << endl;//输出面积
return 0;
}

输出结果:

1
area:9.3

使用rpotected关键字声明受保护的成员可在子类中访问。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "iostream"
using namespace std;
//定义类
class area{
//受保护类成员
protected:
double width;
};
class superarea:area{
public:
void setsquarewidth(double wid); //定义成员函数
double getsquarewidth(void);
};
//子类的成员函数
void superarea::setsquarewidth(double wid) {
width = wid; //通过superarea子类访问父类area的受保护的成员变量。
}

double superarea::getsquarewidth(void) {
return width;
}

int main(){
superarea square;
square.setsquarewidth(3.1);
cout << "width:" << square.getsquarewidth() << endl;
return 0;
}

此程序可分为相互独立的三部分,一类是对父类area的定义,而是对superarea子类及子类函数的定义,三是主函数main(),对于area类中受保护的成员width可以通过子类进行访问。

输出结果:

1
width:3.1

使用 private 关键字声明的私有成员只能被本类的成员函数访问。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "iostream"
using namespace std;
class area{
//定义公有成员
public:
double length;
void setwidth(double wid);
double getwidth();
//定义私有成员
private:
double width;
};
//公有成员函数
void area::setwidth(double wid) {
width = wid;
}
double area::getwidth() {
return width;
}

int main(){
area len1,wid1; //对象
len1.length = 3.1; //访问area共有类成员
cout << "length:" << len1.length << endl;
wid1.setwidth(3.2); //使用公有成员函数设置private私有成员变量的值
cout << "width:" << wid1.getwidth() << endl;
return 0;
}

此程序可以分为相对独立的两个部分,一是 area 类及其公有成员函数的定义,二是主函数 main()。私有成员 width 只能先被类中成员函数访问,再通过相关的公共成员函数实现外部访问。若在类外部使用 area.width=3.2; 方式访问 area 类的私有成员 width,则会报错。

输出结果:

1
2
length:3.1
width:3.2

对象

在C++语言里,对象是某类事物的实例。其声明格式为:

1
类名 对象名;

例如声明area类的对象square:

1
area square;

访问对象的成员

定义了类及其成员对象后,则可访问对象的成员。访问数据成员的基本格式为:

1
对象名.成员名

例如访问area类的对象square的数据成员width:

1
square.width = 3.2;

访问函数成员得基本格式为:

1
对象名.函数名(参数列表)

例如访问 area 类的对象 square 的函数成员 setwidth(double wid):

1
square.setwidth(3.2);

类的成员函数

1
2
3
4
5
6
7
8
9
class 类名{
函数的返回类型 函数名(参数列表)
}
/*
特别的,在类外说明函数的具体实现时,需要使用类名限制成员函数,其形式为:类名::函数名(参数列表)。
*/
返回值类型 类名::函数名(参数列表) {
函数体
}

例如在 area 类中有成员函数 void setwidth(double wid);

1
2
3
4
5
6
7
8
9
10
class area{
...
void setwidth(double wid);
...
}

//在类外说明函数的具体实现
void area::setwidth(double wid){
函数体
}