C++ primer 面向对象编程

面向对象编程有三个基本概念:数据抽象,继承和动态绑定

继承
通过继承类可以定义这样的类,对类型之间的关系建模,共享公共的东西,仅仅特化本质上不同的东西。
将因继承而相关联的类称为一个继承层次,其中一个类称为根,其他类间接或者直接继承根类
c++中,基类必须指出希望派生类重写哪些函数,定义为 virtual,基类希望派生类继承的函数不能定义为 virtual

动态绑定
我们可以编写程序使用继承层次中任意类型的对象,无需关系对象的具体类型
C++ 中通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)即可以指向基类对象也可以指向派生类对象。

定义基类
基类成员函数,成员默认为非虚函数,对非虚函数的调用在编译时确定,为了指明函数为非虚函数,在其返回类型前加关键字 virtual.除了构造函数,任意非 static 成员函数都可以是虚函数,保留字只在类内部的成员函数的声明中出现,不能出现在类外部的函数定义上
基类通常需要将派生类需要重定义的任意函数定义为虚函数

派生类对基类的 public 和 private 成员的访问权限和程序其他部分一样,可以访问 public 而不能访问 private 成员

protocted 成员
有的成员,基类希望可以被派生类访问但仍禁止其他用户访问这些成员,应使用 受保护的访问标号 protected
可以认为protocted 访问标号是 private 和 public 的混合:

  1. 像 private成员一样,protocted 成员不可以被类的用户访问
  2. 像 public 成员一样,protocted 成员可以被该类的派生类访问
  3. 派生类只能通过派生类对象访问其基类的 protected 成员,派生类对其基类类型对象的 protected 成员没有特殊的访问权限

定义基类时,仍然是接口函数为 public , 数据为 private ,提供给派生类类型的接口是 protected 成员和 public 成员的组合

派生类
class classname: access-label base-class
派生类一般会重定义所继承的虚函数
一旦函数在基类中声明为虚函数,他就一直是虚函数,派生类无法改变这一事实
最底层的派生类对象包含每个直接基类和间接基类的子对象

派生类的声明
如需要声明(并不会实现)一个派生类,则声明包含类名但不包含派生列表

virtual 与其他成员函数
C++ 函数调用默认不使用动态绑定,要触发动态绑定,需两个条件:1,只有 指定为虚函数的成员函数才能进行动态绑定,2,必须通过基类类型的引用或指针进行函数调用
使用基类类型的引用或者指针时,不知道指针或引用所绑定的对象的类型:基类类型的引用或指针可以引用基类类型对象,也可以引用派生类对象

如果是公用继承,基类成员保持自己的访问级别:基类的public 成员为派生类的public 成员,基类的 protected 成员为派生类中的 protected 成员
如果是受保护继承,基类的 public 和 protected 成员是派生类的 protected 成员
如果是私有继承,基类的所有成员在派生类中为 private 成员
使用 class 保留字定义的派生类默认具有 private 继承,用struct 保留字定义的具有 public 继承

友元不能继承,基类的友元对派生类的成员没有特殊的访问权限,如果基类被赋予友元关系,则只有基类具有特殊访问权限,该基类的派生类不能访问友元关系的类

如果基类定义static 成员,则整个继承层次中只有一个这样的成员,无论从基类派生出多少个派生类,每个 static 成员只有一个实例
在基类和派生类中使用同一名字的成员函数,其行为和数据成员一样,在派生类作用域中派生类成员屏蔽基类成员

使用容器保存因继承而相关联的对象,在加入派生类对象时,只将对象的基类保存在容器中

句柄类???
定义包装类或句柄类。句柄类存储和管理基类指针,指针所指对象的类型可以变化,既可以指向基类对象,也可以指向派生类对象

模板
函数模板是一个独立于类型的函数,可以作为一种方式,产生函数的特定类型版本
模板定义以关键字 tmplate 开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参,形参之间以逗号分隔
模板形参表不可以为空
模板形参可以表示类型的类型形参,也可以表示常量表达式的非类型形参,类型形参跟在关键字 class 或者 typename 之后定义,例如 class T 是名为 T 的类型形参
这里写图片描述

inline 函数模板
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值