面向对象程序设计的基本特点[1]:抽象
对同一类对象的共同属性和行为进行概括,形成类。
- 先注意问题的本质及描述,其次是实现过程或细节。
- 数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)。
- 代码抽象:描述某类对象的共有的行为特征或具有的功能。
- 抽象的实现:类。
抽象实例——钟表
- 数据抽象:
int hour,int minute,int second- 代码抽象:
setTime(),showTime()类的代码举例:
class Clock {
public:
void setTime(int newH, int newM, int newS);
void showTime();
private:
int hour, minute, second;
};抽象使得协同工作的开发人员可以更多地关注他人的代码功能而非代码实现。
封装
将抽象出的数据、代码封装在一起,形成类。
- 目的:增强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。
- 实现封装:类声明中的{}
类的封装举例:

继承
- 在已有类的基础上,进行扩展形成新的类。
- 详见第7章
多态
- 多态:同一名称,不同的功能实现方式。
- 目的:达到行为标识统一,减少程序中标识符的个数。
- 实现:重载函数和虚函数——见第8章
类和对象的定义[2]
- 对象是现实中的对象在程序中的模拟。
- 类是同一类对象的抽象,对象时类的某一特定实体。
- 定义类的对象,才可以通过对象使用类中定义的功能。
设计类就是设计类型
- 此类型的“合法值”是什么?
- 此类型应该有什么样的函数和操作符?
- 新类型的对象该如何被创建和销毁?
- 如何进行对象的初始化和赋值?
- 对象作为函数的参数如何以值传递?
- 谁将使用此类型的对象成员?
类定义的语法形式
class 类名称
{
public:
公有成员(外部接口)
private:
私有成员
protected:
保护型成员
};
类内初始值
(注意:类内初始化是c++11的新特性,vs2012不支持该设定,请注意编译器版本)
- 可以为数据成员提供一个类内初始值
- 在创建对象时,类内初始值用于初始化数据成员
- 没有初始值的成员将被默认初始化。
类内初始值举例

class Clock {
public:
void setTime(int newH, int newM, int newS);
void showTime();
private:
int hour = 0, minute = 0, second = 0;
};类成员的访问控制
公有类型成员
在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数。
私有类型成员
- 在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。
- 如果紧跟在类名称的后面声明私有成员,则关键字private可以省略。
注意使用class和struct关键字的区别[3][4]:默认访问权限不同;
struct:定义在第一个访问说明符之前的成员是public
class:定义在第一个访问说明符之前的成员是private
访问说明符(access specifiers):public、private:
保护类型成员
与private类似,其差别表现在继承与派生时对派生类的影响不同,详见第七章。
对象
如何使用类的功能:通常我们都要定义一个对象,然后通过对象去调用它的成员函数,这样来使用类的功能。
对象是类的一个实例,类是一种一类对象的一种设计。
对象定义的语法
- 类名 对象名;
例:
Clock myClock;类成员的访问权限
类中成员互相访问
- 直接使用成员名访问
类外访问
- 使用“对象名.成员名”方式访问 public 属性的成员
类的成员函数
- 在类中说明函数原型;
- 可以在类外给出函数体实现,并在函数名前使用类名加以限定;
- 也可以直接在类中给出函数体,形成内联成员函数;
- 允许声明重载函数和带默认参数值的函数。
内联成员函数
- 为了提高运行时的效率,对于较简单的函数可以声明为内联形式。
- 内联函数体中不要有复杂结构(如循环语句和switch语句)。
- 在类中声明内联成员函数的方式:
- 将函数体放在类的声明中。
- 使用inline关键字。
类和对象程序举例[5]
例4-1 钟表类
类的定义
#include<iostream>
using namespace std;
class Clock{
public:
void setTime(int newH = 0, int newM = 0, int newS = 0);
void showTime();
private:
int hour, minute, second;
};成员函数的实现
void Clock::setTime(int newH, int newM, int newS) {
hour = newH;
minute = newM;
second = newS;
}
void Clock::showTime() {
cout << hour << ":" << minute << ":" << second;
}对象的使用
int main() {
Clock myClock;
myClock.setTime(8, 30, 30);
myClock.showTime();
return 0;
}
参考
- ^http://www.xuetangx.com/courses/course-v1:TsinghuaX+00740043X_2015_T2+sp/courseware/81f9b7e20c9c4850b29ccb249c5ed366/1cf1956308a64cd7b8ecd70467e456a6/
- ^http://www.xuetangx.com/courses/course-v1:TsinghuaX+00740043X_2015_T2+sp/courseware/81f9b7e20c9c4850b29ccb249c5ed366/a5ca3b701a7948d8bf4111e0685cdb6a/
- ^https://zhuanlan.zhihu.com/p/81246943
- ^斯坦利·李普曼,约瑟·拉乔伊,芭芭拉·默,等. C++ Primer中文版:第5版[M]. 北京: 电子工业出版社, 2013.9 270.
- ^http://www.xuetangx.com/courses/course-v1:TsinghuaX+00740043X_2015_T2+sp/courseware/81f9b7e20c9c4850b29ccb249c5ed366/a5ca3b701a7948d8bf4111e0685cdb6a/
本文围绕C++面向对象程序设计展开,介绍了其基本特点,包括抽象、封装、继承和多态。详细阐述了类和对象的定义,如类的设计、语法形式、成员访问控制等,还说明了对象的使用及成员函数的实现,最后给出了类和对象的程序示例。
836

被折叠的 条评论
为什么被折叠?



