文章目录
面向对象的编程特点
定义对象要通过构造函数初始化
删除对象要通过析构函数释放资源
在C++中,类定义就是一个声明语句,后面要加“;”,这点和python不同。C++的类内函数一般在类定义外面实现,类型名用类名限定,在类定义里面声明函数原型。
抽象
对同一类对象的共同属性和行为进行概括,形成类。
- 首先注意问题的本质及描述,其次是实现过程或细节
- 数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)
- 代码抽象:描述某类对象的共有行为特征或具有的功能
- 抽象的实现:类
抽象实例——钟表
- 数据抽象:
- int hour, int minute, int second
- 代码抽象:
- setTime(), showTime()
class Clock{
public:
volid setTime(int newH, int newM, int newS);
voild showTime();
private:
int hour, minute, second;
};
封装
-
将抽象出的数据成员、代码成员相结合,将它们视为一个整体。
- 目的:增强安全性和简化编程,使用者不必了解具体细节,而只需通过外部接口,以待定的访问权限,来使用类的成员
- 实现封装:类声明中的{}
public就是类的对外访问接口
private被隐藏在类的内部,外部看不到
继承
- 在已有类的基础上,进行扩展形成新的类。
- 详见第7章
多态
- 多态:统一名称,不同的功能实现方式
- 目的:达到行为标识统一,减少程序中标识符个数
- 详见第8章
类和对象的定义
设计类就是设计类型
- 此类型的“合法值”是什么?
- 此类型应该有什么样的函数和操作符?
- 新类型的对象该如何被创建和摧毁?
- 如何进行对象的初始化和赋值?
- 对象作为函数的参数如何以值传递?
- 谁将使用此类型的对象成员?
为数据成员设置类内的初始值,用于初始化数据成员
class Clock{
public:
volid setTime(int newH, int newM, int newS);
voild showTime();
private:
int hour = 0, minute = 0, second = 0; //类内初始值
};
类成员的访问控制
- 公有类型成员
- 私有类型成员
- 保护类型成员
公有类型成员
在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数。
私有类型成员
在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。
如果紧跟在类名称后面声明私有成员,则关键字private可以省略。
保护类型成员
与private类似,其差别表现在继承与派生时,对派生类的影响不同,详见第七章。
对象的定义语法
类名 对象名;
例:
Clock myClock
类中成员之间直接使用成员名互相访问
从类外访问成员使用“对象名.成员名”方式访问public成员
类的成员函数
- 在类中声明函数原型;
- 可以在类外给出函数体的实现,并在函数名前使用类名加以限定;
- 也可以直接在类中给出函数体,形成内联成员函数;
- 允许声明重载函数和带默认参数值的函数;
内联成员函数
- 为了提高运行效率,对于较简单的函数可以声明为内联函数
- 内联函数体中不要有复杂的结构,如循环和switch语句
- 在类中声明内联成员函数的方式:
- 将函数体放在类的声明中
- 使用inline关键字
例子
#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<<endl;
}
int main(){
Clock myClock;
myClock.setTime(8,30,30);
myClock.showTime();
system("pause");
return 0;