C++类/对象学习笔记

这里说几点(和java,python)不一样的:

*.类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。

函数相关:

先复习一下函数声明和函数定义的相关知识:

“函数定义”是指对函数功能的确立,包括指定函数名,函数值类型、形参类型、函数体等,它是一个完整的、独立的函数单位。

而“函数声明”的作用则是把函数的名字、函数类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查(例如函数名是否正确,实参与形参的类型和个数是否一致)。

在书写形式上,函数声明可以把函数头部复制过来,在后面加一个分号;而且在参数表中可以只写各个参数的类型名,而不必写参数名。

再来说一下头文件,这个东西是c/c++的特色:

通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。

类比java的包,也就是import后面的东西 , 假如你在C++里要导个东西 ,不能直接 "#include 'xxx.cpp' " .而是要先写个和源代码同名的头文件(.h),这个头文件里放变量和函数的声明,最后"#include 'xxx.h' ".相比其他语言C++导包的过程多了一步.

优势:

有两个用处,一个是在开发编译的时候,在各个编译单元(Compile Unit)之间共享同样的定义;一个是在发布程序库的时候,让使用者知道调用接口。比ctrl+o看源码可能方便一点

注意点:

防重入开关,C++ 编译器自适应开关,头文件里应该 ,include 所有该文件中所使用的其它接口头文件,再详细的就不在这里写了,这里主要写类和对象.

成员函数:

声明写在.h中,定义写在.cpp中,记的在函数名称前加"类名 ::(范围解析运算符)". 或者写成内联函数(地下有).

构造函数:

可以简单写成没有返回值的成员函数,但这里很容易出问题,详细版本在此:https://blog.csdn.net/realliyuhao/article/details/106319244

析构函数:

是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。

析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

拷贝构造函数:

是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。详细信息:https://blog.csdn.net/realliyuhao/article/details/106328954

友元函数:

是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。详细信息在此:

https://www.runoob.com/cplusplus/cpp-friend-functions.html,

https://www.cnblogs.com/zhuyf87/archive/2013/02/25/2932682.html

内联函数:

内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。

注意点:

如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline;

在类定义中的定义的函数都是内联函数;

当函数体比较小的时候, 内联该函数可以令目标代码更加高效,这其实就是个空间代价换时间的i节省. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用内联.

其内部不允许使用循环语句和开关语句.

this 指针(->):

Java里的this,python里的self,在python中体现得比C++更明显,类内部的函数第一个参数就是self,甚至可以显示命名.还有,友元函数没有该指针,该指针不能访问静态成员变量.

类的静态成员:

基本的:https://www.runoob.com/cplusplus/cpp-static-members.html

一些有意思的:

https://blog.csdn.net/lms1008611/article/details/81408236 静态成员的基本用法;

https://blog.csdn.net/u011857683/article/details/52294353 静态函数访问非静态成员

指向类的指针:

与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。与所有的指针一样,您必须在使用指针之前,对指针进行初始化。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一门linux下c++通讯架构实战课程,针对c/c++语言已经掌握的很熟并希望进一步深造以将来用c++在linux下从事网络通讯领域/网络服务器的开发和架构工作。这门课程学习难度颇高但也有着极其优渥的薪水(最少30K月薪,最高可达60-80K月薪),这门课程,会先从nginx源码的分析和讲解开始,逐步开始书写属于自己的高性能服务器框架代码,完善个人代码库,这些,将会是您日后能取得高薪的重要筹码。本课程原计划带着大家逐行写代码,但因为代码实在过于复杂和精细,带着写代码可能会造成每节课至少要4~5小时的超长时间,所以老师会在课前先写好代码,主要的时间花费在逐行讲解这些代码上,这一点望同学们周知。如果你觉得非要老师领着写代码才行的话,老师会觉得你当前可能学习本门课程会比较吃力,请不要购买本课程,以免听不懂课程并给老师差评,差评也会非常影响老师课程的销售并造成其他同学的误解。 这门课程要求您具备下面的技能:(1)对c/c++语言掌握的非常熟练,语言本身已经不是继续学习的障碍,并不要求您一定熟悉网络或者linux;(2)对网络通讯架构领域有兴趣、勇于挑战这个高难度的开发领域并期望用大量的付出换取高薪;在这门课程中,实现了一个完整的项目,其中包括通讯框架和业务逻辑框架,浓缩总结起来包括如下几点:(1)项目本身是一个极完整的多线程高并发的服务器程序;(2)按照包头包体格式正确的接收客户端发送过来的数据包, 完美解决收包时的数据粘包问题;(3)根据收到的包的不同来执行不同的业务处理逻辑;(4)把业务处理产生的结果数据包正确返回给客户端;本项目用到的主要开发技术和特色包括:(1)epoll高并发通讯技术,用到的触发模式是epoll中的水平触发模式【LT】;(2)自己写了一套线程池来处理业务逻辑,调用适当的业务逻辑处理函数处理业务并返回给客户端处理结果;(3)线程之间的同步技术包括互斥量,信号量等等;(4)连接池中连接的延迟回收技术,这是整个项目中的精华技术,极大程度上消除诸多导致服务器程序工作不稳定的因素;(5)专门处理数据发送的一整套数据发送逻辑以及对应的发送线程;(6)其他次要技术,包括信号、日志打印、fork()子进程、守护进程等等;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值