C++中类的理解

1、在类内部定义的函数默认为内联函数,不过是否最终成为内联函数要看函数是否足够简单。

2、一种比较特殊的成员函数是const成员函数,该函数拥有一个隐含的const类型的this指针,因此该类型的函数不能改变类的数据成员。

3、用struct和class定义的类的唯一区别在于,struct默认的成员是公有的,而class默认是私有的。

4、inline函数可以在声明或者定义处指定,都是合法的。与其他inline一样,inline函数必须在调用该函数的源文件中可见,所以最好放在头文件中。

5、如果在多个文件中定义同一个类,那么这些定义必须是相同的。因此通常将类的定义放置在头文件中,所有需要使用该类的文件都引用同一个头文件,这就保证了类定义的一致性。

6、可以声明一个类而不定义它,这样就会形成一个不完全类型,只能以有限的方式使用不完全类型,如:只能定义该类型的指针和引用以及函数的返回值类型,不能定义该类型的对象,不过可以定义该类型的静态对象(原因暂不明确)。

7、每个类的定义必须用分号结束,因为类的定义之后会接一个对象定义的列表,而对象定义之后需要加分号,所以。。。

8、非const成员函数包含的this指针是一个指向类对象的const指针,而const成员函数包含的是一个指向const对象的const指针。

9、基于成员函数是否为const可以进行重载,const对象只能调用const成员,非const对象可以使用任何一个成员,但是非const版本是一个更好的匹配。

10、类中有一种特殊的数据成员,可变数据成员mutable,可变数据成员永远不能为const,const类型的成员函数同样可以改变可变数据成员。

11、一旦定义有形参的构造函数,默认无形参的构造函数就不在自动生成,需要自己定义。构造函数声明为const是不必要的,构造函数的工作是初始化对象而不会在意对象是否为const。构造函数不能是虚函数,因为虚函数需要将vtable和指向vtable的指针存储在对象中,但是如果构造函数是虚函数,对象尚未生成vtable将无处存放。另外一点,虚函数的作用是为了使用父类指针动态调用不同子类的虚函数,显然构造函数没有这个必要。

12、构造函数的初始化列表,尽量使用该方式初始化对象,有些情况下必须使用初始化列表,比如const和引用的数据成员的初始化。数据成员在初始化列表中的顺序不代表真正的初始化顺序,顺序由类声明中各个数据成员的声明的次序决定。

13、类中的隐式类型转换,当类的构造函数只有一个形参时,会在形参和类类型之间发生隐身转换,很多情况下这种隐式的转换带来的更多的是隐患,因为程序猿可能没有意识到这种转换,所以在定义只有一个形参的构造函数时,要将其声明为explicit。

14、友元函数和友元类。必须先定义包含成员函数的类,才能将成员函数设为友元。对友元类和非成员函数的友元没有太多的要求

15、static遵循正常的公有/私有访问规则,static的成员函数不能为const类型,以为static不输入任何对象不包含this指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值