以前没认真分辨这几个概念的区别,今天记录一下。
转载:为什么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(constBase* constthis),相当于void Get(Base* this) const。这就是为什么常对象只能调用常成员函数的原因。但是非常量对象可以调用常量函数,因为编译器会自动先转换为常量对象。



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