重载操作符的最简单的方法

C++允许你设置基类指针和一个派生类对象的引用。当我们想写一个函数或数组,可以与来自基类的任何类型的对象一起工作时,这是非常有用的。
如果没有虚函数,基类的指针和派生类的引用将只访问基类成员变量和函数版本。
虚拟函数是一种特殊类型的函数,解析为基础和派生类之间存在的函数的最派生版本(称为重写)。要被认为是一个重载,派生类函数必须具有相同的签名和返回类型作为虚基类函数。唯一的例外是协变返回类型,它允许一个重写返回一个指向派生类的指针或引用如果基类函数返回一个指针或引用基类。
一个功能,旨在成为一个覆盖应使用重写说明符保证它实际上是一个覆盖。
最后的说明符可以用来防止重写一个函数或类。
如果你打算使用虚函数,你应该让你的析构函数虚拟,所以适当的析构函数如果基类指针删除称为。
你可以忽略虚拟分辨率的使用范围解析操作符直接指定这类版本的你想要的功能:如基地。基地::getname()
当编译器遇到直接函数调用时,会发生早期绑定。编译器或链接器可以直接解析这些函数调用。当一个函数指针被调用时,发生了延迟绑定。在这些情况下,调用函数将不能解决,直到运行时。虚拟函数使用后期绑定和一个虚拟表来确定要调用的函数的哪个版本。
使用虚拟函数有一个代价:虚拟函数需要更长的时间来调用,虚拟表的必要性增加了一个指针包含一个虚拟函数的每个对象的大小。
一个虚拟的功能可以通过将其分配到0个纯虚拟/抽象。一类含有一个纯虚函数是一个抽象类,不能被实例化。继承纯虚拟函数的类必须具体地定义它们,否则它也将被认为是抽象的。纯虚拟函数可以有一个身体,但他们仍然被认为是抽象的。
一个接口类是一个没有成员变量和所有纯虚拟函数的接口类。这些通常被命名为从一个首都。
一个虚拟基类是一个基类,它只包含一次,无论多少次,它是由一个对象继承的。
当派生类被分配给基类对象时,基类只接收派生类的基类部分的副本。这就是所谓的对象切片。
动态铸造可以用来将指向基类对象的指针转换成指向派生类对象的指针。这就是所谓的向下转换。失败的转换将返回一个空指针。

重载操作符的最简单的方法是:对于继承的类是写一个重载操作符< <为最基类,然后调用一个虚拟成员函数来完成打印。

初始化和赋值
C++支持两个相关的概念,新的程序员经常搞混了:分配和初始化。
在一个变量被定义后,一个值可以通过赋值操作符(=符号)来分配给它一个值:


int x;//这是一个变量的定义
x = 5;/分配值5到变量x
C++会让你定义一个变量,并给它以同样的步骤的初始值。这就是所谓的初始化。

int x = 5;//初始化变量x的值为5
只有在定义了一个变量时,才可以初始化。
虽然这两个概念在本质上是相似的,并且通常可以用来实现类似的目的,我们将在本课的一些类型需要一个初始化变量值的情况,或不允许转让。因为这些原因,现在的区别是有用的。
未初始化变量
不像一些编程语言,C / C++不初始化变量的给定值(如零)自动(出于性能原因)。因此,当一个变量被编译器分配到一个内存位置时,该变量的默认值是任何垃圾发生在该内存位置!一个变量没有被赋值为一个未初始化的变量。
注:一些编译器,如视觉工作室,将初始化内存的内容,当你使用一个调试生成配置。这不会发生在使用发布生成配置时。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值