面向对象程序设计 第四章 类与对象
面向对象程序设计 第四章 类与对象
一、面向对象的基本特点
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; };
- 对象是现实中对象在程序中的模拟
- 类是同一类对象的抽象,对象是类的某一特定实体
- 定义类的对象,才可以通过对象使用类中定义的功能
2.封装
- 将抽象出的数据、代码封装在一起,形成类。
- 目的:增强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。
- 实现封装:类声明中的{}
- 例:
1 2 3 4 5 6 7 8 9 | class Clock { public : void setTime( int newH, int newM, int newS); void showTime(); private : int hour, minute, second; }; |
3.继承
在已有类的基础上,进行扩展形成新的类。
详见第7章
4.多态
- 多态:同一名称,不同的功能实现方式。
- 目的:达到行为标识统一,减少程序中标识符的个数。
- 实现:重载函数和虚函数——见第8章
二、类和对象
1.类定义的语法形式和访问控制
class //类名称 { pubilc: //公有成员(外部接口),任何函数都可访问 private: //私有成员,只允许本类中的函数访问 protected: //保护型成员,详见第七章 }
2.对象定义的语法
类名 对象名;
例:Clock myClock;
3.类成员的访问权限
1.类中成员互相访问
直接使用成员名访问
2.类外访问
使用“对象名.成员名”方式访问 public 属性的成员
3.例4_1-1:钟表类
//类的定义 #include<iostream> using namespace std; class Clock {//对象名为Clock public: void setTime(int newH=0, int newM=0, int newS=0);//外部接口,公有成员函数,有默认参数值 void showTime();//成员名有两个,setTime和showTime private://私有数据成员 int hour,minute, second; }; //Clock类成员函数的实现 void Clock::setTime(int newH,int newM,int newS){//注意类中的函数,要写::(类的作用域限定符) hour=newH; minute:newM; second=newsS; } void Clock::showTime(){ cout<<hour<<":"<<minute<<":"<<second<<endl; } //对象的使用 int main(){ Clock myClock;//定义对象,myClock myClock.setTime(8,30,30);//调用setime函数,值为8,30,30 myClock.showTime();//调用showtime,显示时间 return 0; }
运行结果为
8:30:30
4.类内初始值
- 可以为数据成员提供一个类内初始值
- 在创建对象时,类内初始值用于初始化数据成员
- 没有初始值的成员将被默认初始化。
- 类内初始值举例
class Clock { public: void setTime(int newH, int newM, int newS); void showTime(); private: int hour = 0, minute = 0, second = 0;//0即类内初始值 };
5.类的成员函数语法
- 在类中说明函数原型;
- 可以在类外给出函数体实现,并在函数名前使用类名加以限定;
- 也可以直接在类中给出函数体,形成内联成员函数;
- 允许声明重载函数和带默认参数值的函数。
- 在类中声明内联成员函数的方式:
1.将函数体放在类的声明中。
2.使用inline关键字。
分类:
面向对象程序设计:笔记
标签:
C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧