C++ 重载、重写(覆盖)、隐藏

  • Post author:
  • Post category:其他


以前没认真分辨这几个概念的区别,今天记录一下。

转载:

为什么const对象只能调用const成员函数,而不能调用非const成员函数? – 阿瞒123 – 博客园 (cnblogs.com)

重点:

1.重载只能在一个类中。

2.重写只能在子类和派生类中。

3.隐藏只能是子类和派生类中。

4.

重载可以重载const

(很有意思),非常量对象也可以调用常成员函数,但是如果有重载的非常成员函数则会调用非常成员函数。

1.重载:就是在一个类中声明同名和返回值类型相同的函数,但参数不同

2.重写(覆盖):就是定义虚函数,子类继承重写

3.隐藏:就是派生类定义了一个和基类同名和返回值的函数。但基类的函数不定义成虚函数

4.const重载(静态)

原因:通常我们在类中定义一个函数,实际上传入的是 void Get(Base* this),这代表一个指向Base对象的指针this被传入到了Get函数中。而但对象被定义成const 时候,比如const Base a,则调用函数的时候函数中必须要有 void Get(

const

Base*

const

this),相当于void Get(Base* this) const。这就是为什么常对象只能调用常成员函数的原因。但是

非常量对象可以调用常量函数

,因为

编译器

会自动先转换为常量对象。



版权声明:本文为qq_38409301原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。