c++中的类


  1. 用于封装抽象出的方法和属性,包括数据抽象(数据)和行为抽象(函数)
  2. 关键字:class, public, private, protected, this, final, override, mutable, explicit
  3. 类的成员函数可以定义在类中,也可以定义在类外 [ 0 ] ^{[0]} [0],定义在类外时,类中需要给出声明,且类外函数的定义前需要加上该类域名空间(eg: 有class time类,在类外定义成员函数时就需要在函数名前加上time::)
  4. 类对于其成员的保护用public,private,protected关键字实现,在类定义中可以任意顺序多次出现,但注意同一数据成员仅可在上述三种之一后方声明,否则出现歧义(error)
  5. 类的定义类似结构体,但在使用时不需要像 [ 1 ] ^{[1]} [1]结构体(struct)一样带上class关键字,(当然,也可以带上)其访问成员的方法同结构体一样(类变量用 . ,类指针用 ->)
  6. 使用类定义实例时,多个实例的定义为其分别分配数据空间存储数据,但成员函数的空间仅分配一次,即不同类实例共享成员函数 (不同类实例的成员函数首地址相同)
  7. 类也可以使用typedef或using定义别名,但意义相对不大
  8. this关键字是一个指针,指向当前调用的类,对于每一个类,都有属于自己的this指针,可以用于告诉编译器区分成员函数的同名的形参变量(实际上this指针是在定义任何成员函数时自动作为一个隐式的形参传入函数的) [ 2 ] ^{[2]} [2]

注[0]:在类中定义和类外定义实际上存在区别,编译器会尽量将类中定义的成员函数视为内联函数(即使没有显式声明为inline),而将类外定义的函数视为一般函数处理,故非必要情况一般建议成员函数都在类外定义(尤其是构造函数和析构函数)

注[1]:事实上c++的结构体声明实例时可以不用再带上struct关键字,当然为了兼容C语言带上也可以

注[2]:实际上避免形参同名的一个良好习惯是用成员名加上“_”,用以直接区分成员和形参,而不是采用this指针的方式,this指针的使用的必要性往往是在需要返回对象本身或本对象引用的成员函数中。

注:在使用类声明实例的行之前应当存在类定义(本体),否则无法声明实例,但若是只声明类指针和引用,则可以采用类前向声明为 class 类名; 放在声明前的行中

访问器(getter)和更改器(setter)


  1. 访问器与更改器是c++类定义中的一个良好原则和习惯,访问器是指以get开头的函数名的成员函数,更改器是指以set开头的函数名的成员函数(当然,并不强制,实际上对于bool类型的数据,定义以is开头的访问器会更好)
  2. 意义:对于类定义中的数据成员应该尽最大可能将其声明在私有段,其次是保护段,最后才是公有段,而对于前两者而言,外部无法与之取得联系,为解决这一问题,可以采用间接访问的原则,即使用访问器和更改器,其好处在于:
    • 相较于提供直接对外开放的数据成员,采用访问器和更改器的方式能够更好的实现代码的可维护性,同时前者违背了抽象封装的原则
    • 对于一些对值具有特定要求的数据成员(如年龄不能小于0),采用访问器和更改器的方式可以对修改的值进行判断,而相较之下对外开放该类数据成员时就需要特别小心地使用以保证不会输入不期望的赋值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值