c++类的定义使用以及小知识杂记

1.类的 实例化:类是图纸,而对象是房子,只有实例对象时才会分配内存,只会分配成员变量的空间,成员函数会放到公共代码区

2.实例对象时会生成符号表,存放成员函数地址

3.全局变量 的声明

extern int size; 定义: int size=0;  所有文件可见

在类的外部  static int size;                                     仅当前文件可见

4.成员变量命名规则:_year  或者m_year  表示成员变量  函数名一般驼峰法:GetInfo()

5. this:指向对象,每个函数的形参会自动传入,一般隐藏

对象的this指针地址和成员变量的地址有关系吗?

是第一个普通变量的地址C++ 对象地址解析_Cycleche的博客-CSDN博客_c++对象的地址

6.构造函数:全缺省函数声明意思是  Data(int a=0,int b=1,int c=2);

半缺省  Data(int a,int b,int c=2);

7. 类的前置声明的使用与好处:节约编译时间,而且使用时自定义类型A需要使用指针ptr*,因为B类定义时需要知道自定义类A的大小,可以参考这篇博客

 C++ 前向声明(forward declaration)能做什么?_十一月zz的博客-CSDN博客_前向声明作用

8.类的初始化列表:对于自定义类型建议使用初始化列表的形式,因为初始化列表是成员变量定义的地方,即使不在此处初始化,编译器仍然会去初始化列表中调用其构造函数,在类内定义,编译器还是会调用构造函数,所以直接在此会提高效率

拷贝初始化会建立临时对象,然后再赋值到新对象。

但是对于:引用成员变量、const成员变量、自定义类型成员(该类没有默认构造函数) , 必须使用初始化列表进行初始化。对于引用和const成员变量,不接受定义后的赋值,而private中只是进行声明并没有定义,因此C++规定将其放在初始化列表进行定义并且赋值

9.什么是缺省值?俗称默认初始值

缺省值需要从后向前依次缺省。

 函数参数缺省值/默认值_Trm100的博客-CSDN博客_函数缺省值

10. static成员函数没有this指针。

  • (1)在修饰变量的时候,static 修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
  • (2)static 修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是 extern 外部声明也不可以。
  • (3)static 修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用static 修饰的变量存放在全局数据区的静态变量区,包括全局静态变量和局部静态变量,都在全局数据区分配内存。初始化的时候自动初始化为 0。
  • (4)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用 static 修饰。
  • (5)考虑到数据安全性(当程序想要使用全局变量的时候应该先考虑使用 static)

11. 友元函数也没有this指针

友元函数的注意事项

1)        友元函数不是类的成员函数,在函数体中访问对象的成员,要用对象名加运算符”.”加对象成员名。

2)        友元函数可以访问类中的所有成员,不受publicprivate protected 的限制

3)        友元函数的作用域不是该类的作用域。

4)        友元函数破坏了类的封装性,尽量少用

5)        友元不能使用const,在类中,const 修饰函数是修饰函数的什么?当然是类函数中的this指针了,那么友元函数有没有this指针呢?当然没有this指针了,所以友元函数不能用const修饰。
 

12.  栈区先定义的变量放到栈底,地址高,后定义的变量放到栈顶,地址低,因此是向下生长的,堆区则相反

13. 栈可以通过函数_alloca进行动态分配,不过注意,所分配空间不能通过free或delete进行释放

14.静态 全局  局部析构函数调用顺序:

15. 字符串常量字符在代码段

16.单例的主要作用是保证程序在运行中只有一个实例;介绍new造成的空间浪费

17.拷贝构造是否需要自己构造?

18.前置++:直接++,返回旧值;     后置++:先创建副本,++,然后值返回 

19.c++拷贝构造函数(为什么要用const,参数为什么用引用)

引用 必须使用的原因是对象 之间值拷贝会产生递归调用,const不是一定要的。

此外,还需注意为什么建议& 前加const:

                1、在c++中其实是有最小权限原则的,非const对象是可以调用const成员函数的。

                2、const成员函数是不能调用非const成员函数,只能通过强制或者定义mutable

                3、构造与析构函数不能定义为const成员函数,构造跟析构会对对象做修改

20.详解C/C++代码的预处理、编译、汇编、链接全过程 - 知乎 

21. 常量和引用成员变量必须使用初始化列表形式来初始化,因为常量const 不可改变

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老赵的博客

叮咚,你的赏钱已到账,嘿嘿嘿

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值