C/C++编程笔记:C++入门知识,C++类和对象详解
yund56 2025-05-24 22:06 13 浏览
本篇要学习的内容和知识结构概览
类及其实例化
类的定义
将一组对象的共同特征抽象出来, 从而形成类的概念.
类包括数据成员和成员函数, 不能在类的声明中对数据成员进行初始化
声明类
形式为:
无论是数据成员还是成员函数, 都是这个类的成员, 都具有一个访问权限, 如果没有关键字进行修饰, 则默认为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语言编程学习基地
有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!
相关推荐
- 分享|最美色彩!40张纯迷彩高清原图壁纸送给你
-
最美的色彩是什么?对于军人来说是迷彩那是青春的本色是理想、使命的颜色40张纯迷彩高清原图壁纸送给你so快来收图!!军报记者微信发布作者:剑客小吉;编辑:王旭;编审:曲延涛;投稿邮箱:jfjbwx@16...
- 你还在用百度搜图?推荐5个图片素材库,你要的图片都有!
-
自媒体运营人每天都需要进行内容创作,所以少不了图片、视频、文案素材等,那么这些自媒体素材哪里找呢?今天,就给大家分享5个图片和视频素材库,文案素材下期再给大家详细介绍。图片和视频素材现在已经是做短视频...
- 《2》图片原创无版权素材
-
粉樱于雨中轻轻摇曳,花瓣飘呀飘的,落在小径上、湖面上,将世界晕染成柔和的粉色。雨滴似银线,串联起天空与湖水,古亭在一旁静静凝望,连空气都透着甜意。我们一直在寻觅“诗意”的模样,原来就是这般——有落花纷...
- 全网最全的图片素材网站分享!任意下载!值得收藏!
-
自媒体时代,很多内容创作者都需要高清的图片资源。因为图片不清晰会带来不好的用户体验~众所周知,从网上下载的图片一般都是有版权的!如果你直接下载使用,可能会有侵权的风险!今天为了帮助大家解决图片问题,今...
- 中秋节素材(海报+插画)!绝景良时难再并
-
部分预览随机选取中秋节素材(海报+插画)(仅供会员下载)...
- 10张早上好美图,早安祝福语和祝福图片选集
-
每天准时分享接收:早安问候图片、漂亮的早安图片、问候祝福语、动态聊天表情包等等每日的祝福准时送达,愿你用满满的正能量开启新的一天。美满,是日常的点点汇聚;情谊,是时光的悠悠长卷;一声招呼,穿越五湖四海...
- 晚安心语正能量经典素材带图片,让你一见倾心
-
一、没事的,每个人大概都会经历一些情绪崩溃或者极端的时刻,会好的,会熬过来的。二、以后,只对两种人好,一种是对我好的人,一种是懂得我的好的人,一个人的温暖也是有限的啊,一点都不能浪费。三、要钱,就要努...
- 太厉害了,52种科幻画主题创意素材,极其脑洞大开,科技创新未来
-
图片来自网络,仅作分享,如有侵权请联系删除哦...
- 综合绘画素材—29张冬天主题绘画素材,一起来画你心中的冬天呀
-
图片来自,仅作分享,如有侵权请联系删除哦...
- 20张彩色线描装饰画素材!一起欣赏线条带来的艺术美呀!
-
图片来自网络,仅作分享,如有侵权请联系删除哦...
- 国外的免费素材网站!这3个大神私藏款,你还没用过?
-
做PPT没素材?去网上找了半天,浪费时间不说,大部分还收费,等于白忙活!不少小伙伴也问我有没有免费好用的素材网站,这不就来了。今天和大家分享3个国外的素材网站,关键是免费又高质量。不管是PPT设计还是...
- 8个高清无版权的图片资源网站,质量高又免费,够你用一辈子
-
很多时候我们找素材总是要花费很多时间,今天就给大家分享8个,高清无版权的图片资源网站,质量高又免费,够你用一辈子。01*Logosc链接:https://www.logosc.cn/so/这是一个免版...
- 100种超萌手帐素材简笔画,小白看一遍也能学会
-
手帐素材集中营:天气、美食、植物花草、动物、人物、乐器都在这里。一次画个够,转存轻松做手帐~爱画画,爱生活~...
- 超治愈萌系手帐素材大全 美食旅游花草人物花边都备齐了
-
现代人每天都生活在一个充满焦灼感的空气中,成年人的世界里,每个人都不容易。不论是生活还是工作,都充满了各种挫折。很少有人能一帆风顺,为学习、为工作、为家庭、为感情、我们总会在坎坎坷坷中成长,难免会觉得...
- 一周热门
- 最近发表
- 标签列表
-
- filter函数js (37)
- filter函数excel用不了 (73)
- 商城开发 (40)
- 影视网站免费源码最新版 (57)
- 影视资源api接口 (46)
- 网站留言板代码大全 (56)
- java版软件下载 (52)
- java教材电子课本下载 (48)
- 0基础编程从什么开始学 (50)
- java是用来干嘛的 (51)
- it入门应该学什么 (55)
- java线上课程 (55)
- 学java的软件叫什么软件 (38)
- 程序开发软件有哪些 (53)
- 软件培训 (59)
- 机器人编程代码大全 (50)
- 少儿编程教程免费 (45)
- 新代系统编程教学 (61)
- 共创世界编程网站 (38)
- 亲测源码 (36)
- 三角函数积分公式表 (35)
- 函数的表示方法 (34)
- 表格乘法的公式怎么设置 (34)
- sumif函数的例子 (34)
- 图片素材 (36)