C/C++编程笔记:C++入门知识,C++类和对象详解
liuian 2024-12-23 12:10 53 浏览
本篇要学习的内容和知识结构概览
类及其实例化
类的定义
将一组对象的共同特征抽象出来, 从而形成类的概念.
类包括数据成员和成员函数, 不能在类的声明中对数据成员进行初始化
声明类
形式为:
无论是数据成员还是成员函数, 都是这个类的成员, 都具有一个访问权限, 如果没有关键字进行修饰, 则默认为private权限
声明一个类, 像这样:
定义成员函数
形式为:
// :: 为作用域运算符, 表示这个函数属于哪个类
返回类型 类名::成员函数名(参数列表) {
函数体 // 内部实现
}
我们在上面的声明类的代码中, 声明了成员函数, 我们可以在类外面定义成员函数, 也就是给出函数体
像这样:
如果在声明类的同时, 在类体内给出成员函数的定义, 则默认为内联函数
我们一般都是在类体内存给出成员函数的定义
像这样, 完成一个类的声明和定义
不能在类体内和类体外对数据数据成员赋值
像这样是不行的:
只有产生了具体对象, 这些数据值才有意义
初始化: 在产生对象时就使对象的数据成员具有指定值, 则称为对象的初始化
赋值: 有了对象之后, 对象调用自己的成员函数实现赋值操作
使用类的对象
类的成员函数可以直接使用自己类的私有成员
类外面的函数不能直接访问类的私有成员, 而只能通过类的对象使用公有成员函数
定义类对象指针的语法: 类名 * 对象指针名 = 对象地址;
通过对象指针可以访问对象的成员: 对象指针名 -> 对象成员名;
像这样:
构造函数
默认构造函数
一个类如果没有定义任何构造函数, 编译器会自动定义一个不带参数的构造函数, 也就是默认构造函数
比如我们有一个类Point
则默认构造函数就是这样:Point::Point() {};
如果一个类提供了构造函数, 系统不再提供默认构造函数
我们有一个Point类, 像这样:
则我们就不能在main函数中这样使用:
我们想要这样使用, 则必须手动添加无参数构造函数
像这样:
定义构造函数
构造函数的名字应该与类名同名, 并在定义构造函数时不能指定返回类型, void也不可以
我们一般都在类的声明内部进行函数定义
像这样:
注意
不能在程序中显式地调用构造函数, 构造函数是自动调用的
即不能这样: Point a.Point(2, 3);
只能这样: Point a(2, 3);
作用
用来在产生对象的同时, 进行对象的初始化
构造函数和运算符new
new用来建立生存期可控的动态对象, 返回这个对象的指针
new和构造函数一同起作用
过程: 当用new建立动态对象时, 首先分配可以保存这个类对象的内存空间, 然后自动调用构造函数来初始化这块内存, 再返回这个动态对象的地址
使用new建立的动态对象只能使用delete删除, 以释放所占空间
像这样:
构造函数的默认参数
如果我们定义了有参构造函数, 又想使用无参构造函数, 我们可以将有参构造函数的参数全部使用默认参数
像这样:
复制构造函数
作用: 通过拷贝方式使用一个类的已有对象来建立一个该类的新对象, 一般编译器会建立一个默认的复制构造函数
像这样:类名(const 类名 &); // 为了不改变原有对象, 使用const来进行修饰
复制构造函数也可以自定义, 则编译器不再调用默认的复制构造函数
像这样:
使用复制构造函数的三种情况
当用一个类的对象去初始化另一个对象时, 需要调用复制构造函数
像这样:
如果函数的形参是类的对象, 调用函数时, 进行形参与实参的结合时, 需要调用复制构造函数
像这样:
如果函数的返回值是对象, 当函数调用完成返回时, 需要调用复制构造函数, 产生临时对象, 并在执行完返回值语句后, 析构临时对象
函数参数使用对象的引用不产生副本, 所以当对象作为函数参数时, 推荐使用对象引用这种方式
析构函数
作用:在对象消失时, 使用析构函数释放由构造函数分配的内存
定义析构函数
为了与构造函数区分, 在析构函数前加”~”号,
并且在定义析构函数时, 不能指定返回类型, 即使是void类型也不可以;
也不能指定参数, 但可以显式的说明参数为void
格式: ~类名(); // 或者 ~类名(void);
代码像这样:
~Point(); // 或者 ~Point(void);
析构函数在对象的生存期结束时自动调用, 然后对象占用的内存被回收
全局对象和静态对象的析构函数在程序运行结束之前调用
类对象的数组每个元素调用一次析构函数
像这样: 可以运行该代码, 查看程序执行过程
析构函数和运算符delete
当使用运算符delete删除一个动态对象时, 首先为这个对象调用析构函数, 然后再释放这个动态对象占用的内存
像这样:
默认析构函数
如果没有定义析构函数, 编译器自动为类产生一个函数体为空的默认析构函数
像这样:~ Point(){};
成员函数重载及默认参数
成员函数可重载或使用默认参数, 为了提高可读性
this指针
this指针的概念和作用
当一个成员函数被调用时, 系统自动向该函数传递一个隐含的参数, 指向调用该函数的对象指针, 名为this, 从而使用成员函数知道该对哪个对象进行操作.
作用: 它将对象和该对象调用的成员函数连接在一起, 从外部看来, 每个对象都拥有自己的成员函数, 但处理这些数据成员的代码可以被所有的对象共享
this指针的实际形式
我们一般情况下都会省略this
一个类的对象作为另一个类的成员
因为类本身就是一种新的数据类型, 所以一个类的对象可以作为另一个类的成员
像这样:
类和对象的性质
对象的性质
同一类的对象之间可以相互赋值
Point a(2, 3); Point b = a;复制代码
可以使用对象数组
Point arr[3];复制代码
可以使用指向对象的指针, 使用取地址运算符&将一个对象的地址赋值给该指针
Point p = &a;p -> display();复制代码
对象作为函数参数时, 可以使用对象, 对象引用和对象指针三种方式, 推荐使用对象的引用作为函数参数, 可以使用const修饰符保证原来的对象不被修改
一个对象可以作为另一个类的成员
类的性质
使用类的权限
类本身的成员函数可以使用类的所有成员(私有和公有和受保护的成员)
类的对象只能访问公有成员函数
其它函数不能使用类的私有成员, 也不能使用公有成员函数
虽然一个类可以包含另一个类的对象, 但这个类也只能通过被包含的类对象使用成员函数, 再访问数据成员
不完全类的声明
class People; // 不完全的类声明
People * p; // 定义一个全局变量类指针
只有使用类产生对象时, 才进行内存分配
不完全类不能进行实例化, 否则编译出错, 我们使用得不是很多
空类
class Empty {};
可以不包括任何声明, 也可以没有任何行为, 但可以产生空类对象
像这样:
作用: 在开发大型项目时, 需要在一些类还没有完全定义或实现时进行先期测试, 保证代码能正确地被编译, 当然我们有时也会给它一个无参构造函数, 来消除警告
类的作用域
声明类时使用的一对话括号{}形成类的作用域, 也包括类体外成员函数的作用域.
在类作用域中声明的标识符只在类中可见.
像这样:
总结
每个语言的类和对象其实大同小异, 可能一些名字不一样, 可能一些格式不一样, 但是思想是一样的, 例如一个对象的产生, 都得申请内存, 然后再对这块内存进行初始化, 有自己的属性, 还有自己的行为. 我们在学习的时候不要纠结于语言的本身, 要学会总结和自己已经学过的其它语言的异同点, 从而总结出规律, 提炼出本质, 这才是最主要的. 今天看到一段话送给大家, 大概是这么说的: 不是我们变老了就当不了程序员了, 而是因为我们不想学习了, 所以才显得我们变老了, 所以也就当不了程序员了!
自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!
C语言C++编程学习交流圈子,关注+私信【C/C++编程】微信公众号:C语言编程学习基地
有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!
相关推荐
- win7怎么升级到windows10(win7怎么升级到win11系统)
-
Win7不够8G内存怎么升级到win10。朋友也就是说你现在在使用win7系统。内存不够8G那就是4G的呀。Windows10最低配置的内存就是4G。所以说你要把windows7升级为window...
- 手机桌面图标隐藏了怎么弄出来
-
答:手机恢复隐藏的手机图标操作步骤如下:1.首先将手机解锁后进入华为手机的桌面,双指按住桌面的上方和下方,然后由内向外滑动屏幕,呼出隐藏空间。2.在新出现的页面中,可以查看已经被隐藏的应用。3.在列出...
- lol游戏崩溃是什么原因(lol游戏崩溃的原因)
-
1.试试重启电脑,或者是重新启动游戏。2.如果卡死了可以稍微等一下,会自动恢复。3.卡死的情况如果可以打开任务管理器,查看cpu、显卡、内存的占用率,如果异常查看对应的驱动是否正常,如果占用率都正常温...
- 视频工具箱怎么打开(小米视频工具箱怎么打开)
-
原因:系统默认隐藏了,需重新设置。方法/步骤1.点击特色功能在设置界面,点击特色功能。2.点击视频工具箱在特色功能界面,点击视频工具箱。3.开启视频工具箱在视频工具箱界面,开启视频工具箱即可。红米的视...
- win7 win10配置要求(win10 win7哪个要求配置高)
-
要求不算高,处理器双核2.0ghz以上,4gb内存,512兆显存的显卡,这个是流畅运行Win10的基本要求。但是现在的电脑硬件性能已经远高于以上的配置,所以不用担心升级Win10后是否会卡顿的问题。不...
- 台式电脑配置低怎么升级(台式电脑配置升级需要换哪些东西)
-
1.首先查看电脑主板规格,如果规格太落后,就需要升级主板,如果主板规格较新,可以主板规格下升级其他配件2.在主板规格不变的情况下,优先升级CPU,提升CPU主频3.加大内存规格。如果主板支持的话,可以...
- win10突然桌面的东西都没了(windou10桌面东西突然没了)
-
win10看不到正常桌面演示机型:联想GeekPro2020(系统版本:Windows10)win10看不到正常桌面是因为桌面系统图标被隐藏了,可以在个性化的主题设置中找到“桌面图标设置”,并点击...
-
- 下载清除手机垃圾免费软件(华为自带清理软件)
-
手机垃圾清理软件排行:1、LBE安全大师对于这个软件,大伙都熟悉吧,它在清理手机垃圾方面很有研究,是安卓平台上首款主动式防御软件,也是第一款具备实时监控与拦截能力的安全软件,因此,深受大家的青睐和喜欢。2、猎豹清理大师猎豹清理大师(原金山清...
-
2025-12-27 20:55 liuian
- 电脑技术咨询(电脑技术在线咨询)
-
华为电脑关闭热门咨询的步骤如下:打开设置,然后找到通知和状态栏,点击通知智能管理,在找到有资讯热点的应用,然后关闭锁屏通知。华钜同创跨境电商服务(深圳)有限公司华钜同创跨境电商服务(深圳)有限公司成立...
- dell笔记本推荐(dell笔记本电脑推荐)
-
灵越16plus 定位是全能本,拥有游戏本的性能,外观重量接近轻薄本,散热好,满足主流设计软件使用,玩中小型游戏无压力,还有硬件防蓝光屏幕保护眼睛~成就5320性能颜值在线,日常办公使用...
- 工业摄像头驱动软件(工业摄像头 图像识别)
-
1、这样的摄像头肯定是联网的,并且有可登陆的管理界面2、这样的摄像头肯定有一个总的管理后台用nmap等端口扫描器扫描你们的办公网段并识别设备OS类型,找到摄像头的登录界面。搜索这款摄像头的默认账号口令...
- 高端显卡(带DVI接口的最高端显卡)
-
高级显卡有很多用处。首先,它可以提高电脑图形和处理的高清度和速度,使得用户可以流畅的玩游戏、观看高清电影等。其次,高级显卡可以支持更加复杂的计算任务,比如机器学习、科学计算等,因此在这些任务中能够提升...
- flash动画软件(Flash动画软件下载)
-
你好,如果希沃白板里的Flash图标无法播放,可能是因为以下原因:1.缺少Flash插件:Flash图标需要AdobeFlashPlayer插件来播放。请确保您的设备上已安装最新版本的Flash...
- windows10多少钱一年(windows10 多少钱)
-
2023年版的Windows10将是一个经过进一步改进和优化的操作系统。它将提供更快的启动速度和更高的性能,同时增强了安全性和稳定性。用户界面可能会有一些改变,以提供更好的用户体验。此外,它还将支持...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
