1-5 class分类、C++分两部分、inline、初始化列表、const、重载、单例模式、传引用、友元、操作符重载
1 class的经典分类:
1)不带指针:Complex(复数)。不带指针的类,多半不用写析构函数。
2)带指针:String
2 基于对象和面向对象的一个区别:
基于对象:单一对象的设计
面向对象:对象之间有继承、复合、委托的关系
3 C++分为两个部分:语言部分和标准库部分!
使用标准库也是非常非常重要的事情。如果不用标准库,不能算是一个合格的C++程序员。
书本推荐:
STL:标准库的前身,占80%的标准库。这本书是标准库的源码。
4 #include <stdio.h> 变成 #include <cstdio>
5 模板及一些说明
inline:会比较快。负责函数无法做成inline。最后是否变成inline了?由编译器决定。
初始化列表:re(r):成员(参数),这个是正规的写法,这里叫初始化,而在构造函数大括号内,叫赋值。
const:取值函数后加const:类内部的函数分为会改变数据的和不会改变数据的两种。
重载:同名函数(编译器会生成不同名的函数)
6 单例设计模式
构造函数:如果在私有区域:不可被外界调用
1)构造函数在private内
2)声明静态getInstance()函数,返回本类的静态引用
3)该函数内创建静态类对象,并返回。
7 不声明为const时,会遇到的问题:
解析:我要定义一个const复数对象,这个对象就只能调用const函数,如果real()没有被声明为const,就会报错。
8 参数传递
引用(函数参数里加个&,调用时正常调用):在底部其实是指针,像传指针那么快。
最好所有参数传递都传引用,传1个char只有1个字节,还更少一点呢,这种情况也可以传值。
9 返回值(也尽量传引用)
__doapl():函数名,do assignment plus....(翻译:赋值的加法)
不可以返回引用:不可以返回栈对象的引用
10 友元
C++强调封装,朋友会把封装打开,所以不能太多了
友元:可以直接拿数据
调函数拿数据:会稍微慢一点
以上红框,本对象直接调用了另一同类对象的私有成员,为什么不需要通过函数调用?
解释:相同class的各个objects之间互为友元
11 操作符重载(是个很大很大的话题)
用plus函数还不如用+来的直接一点,那仿函数呢?
1)成员函数
不同的编译器,这个this的位置不一定一样
理解一下:返回这个“东西”就行,不需要知道返回是以reference形式接收的,reference速度就快,用value来接收,速度就慢
连加:c1线先加到c2上,c2再加到c3上,所以+=的重载返回值不能是void。
2)非成员函数
返回值都不是引用:因为返回的是本地对象,不是参数中的this指针
typename():这个就是建立一个对象
+=定义为成员函数,+定义为全局函数
如上重载了正号,返回值并不是新建立的一个local对象,所以应该可以返回reference!!
如上<<不可能写成成员函数,因为<<符号后面的类型千变万化。这个<<符号是特殊情况!(其它符号可能既可以写成成员函数,又可以写成全局函数)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!