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

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

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

重点:

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

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

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

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

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

C++ 重载、重写(覆盖)、隐藏_第1张图片

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

C++ 重载、重写(覆盖)、隐藏_第2张图片

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

C++ 重载、重写(覆盖)、隐藏_第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。这就是为什么常对象只能调用常成员函数的原因。但是非常量对象可以调用常量函数,因为编译器会自动先转换为常量对象。

C++ 重载、重写(覆盖)、隐藏_第4张图片

C++ 重载、重写(覆盖)、隐藏_第5张图片

 

C++ 重载、重写(覆盖)、隐藏_第6张图片

你可能感兴趣的:(C++经验,c++)