C++类类型成员函数的重载、覆盖与隐藏
2017-03-21 12:32
281 查看
类层次中的同名成员函数,有3种关系:重载overload,覆盖override和隐藏oversee,hide。
class A{//下面都是重载关系的函数
...
virtual int fun();
void fun(int);
void fun(double,double);
static int fun(char);
...
};
成员重载函数的特征:
位于同一个类中
相同的函数名字
不同的参数列表
virtual关键字可有可无
分别位于基类和派生类中
有相同的函数名字
相同的参数,参数个数和类型
基类函数必须是虚函数,virtual
与上面重载的区别是
覆盖是子类与父类之间的关系,是垂直关系;而重载是同一个类中不同的方法之间的关系,是水平关系。
覆盖要求的是参数列表相同,重载则要求参数列表不同;覆盖要求返回类型相同,重载无要求。
覆盖关系中,调用方法是根据对象的类型来决定的,重载关系是根据调用的实参表和形参表来选择方法的。
1)两个函数的参数相同,但是基类函数不是虚函数,和覆盖的区别是基类是否是虚函数
上面若想调用基类的同名函数,则需要加上域名进行指定
2)两个函数的参数不同,无论基类 函数是不是虚函数,基类函数都会被屏蔽,和重载的区别是两个函数是不是在同一个类中。
1.成员重载
只有在同一个类中定义的同名成员函数才存在重载关系,主要特点是函数的参数和数目不同,但不能是参数的个数和类型均相同,仅仅依靠返回值的不同来区分函数,和普通的函数重载是一样的,另外,重载和成员函数是否是虚函数无关。class A{//下面都是重载关系的函数
...
virtual int fun();
void fun(int);
void fun(double,double);
static int fun(char);
...
};
成员重载函数的特征:
位于同一个类中
相同的函数名字
不同的参数列表
virtual关键字可有可无
2.成员函数的覆盖
覆盖是指在派生类和基类中的同名函数,但是基类函数必须是虚函数。主要特征是分别位于基类和派生类中
有相同的函数名字
相同的参数,参数个数和类型
基类函数必须是虚函数,virtual
class A{ public: virtual void func1(int,int){} }; class B:public A{ public: void func1(int,int ){} };
与上面重载的区别是
覆盖是子类与父类之间的关系,是垂直关系;而重载是同一个类中不同的方法之间的关系,是水平关系。
覆盖要求的是参数列表相同,重载则要求参数列表不同;覆盖要求返回类型相同,重载无要求。
覆盖关系中,调用方法是根据对象的类型来决定的,重载关系是根据调用的实参表和形参表来选择方法的。
3.成员函数的隐藏
隐藏指的是在某些情况下,派生类中的函数屏蔽了基类中的同名函数。分为下面 两种情况1)两个函数的参数相同,但是基类函数不是虚函数,和覆盖的区别是基类是否是虚函数
class A{ public: void fun(int xp){ cout<<xp<<endl; } }; class B:public A{ public: void fun(int xp){//将隐藏父类的fun函数 ... } };
上面若想调用基类的同名函数,则需要加上域名进行指定
B b; b.A::fun(2);
2)两个函数的参数不同,无论基类 函数是不是虚函数,基类函数都会被屏蔽,和重载的区别是两个函数是不是在同一个类中。
class A{ public: virtual void fun(int xp){ cout<<xp<<endl; } }; class B:public A{ public: void fun(char* xp){//将隐藏父类的fun函数 ... } };由于派生类中基类的同名成员函数被隐藏,所以调用的时候可能会出现问题。如果调用的是基类的成员函数则要进行域名指定
相关文章推荐
- C++类成员函数的重载、覆盖和隐藏区别
- C++类成员函数的重载、覆盖和隐藏区别?
- 【非原创】C++类成员函数的重载、覆盖和隐藏
- 成员函数的重载、覆盖与隐藏
- C++成员函数的重载、覆盖与隐藏
- 成员函数的重载、覆盖与隐藏
- 类成员函数的重载、覆盖和隐藏区别?
- C++中成员函数的重载、覆盖与隐藏
- C++ 成员函数的重载、覆盖与隐藏
- C++中成员函数的重载、覆盖与隐藏
- 成员函数的重载、覆盖与隐藏
- C++成员函数的重载、覆盖与隐藏
- 类成员函数的重载、覆盖和隐藏区别
- C++成员函数的 重载、隐藏、覆盖分析(转)
- 转载:成员函数的重载、覆盖与隐藏
- 类成员函数的重载、覆盖和隐藏区别
- C++成员函数的重载、覆盖与隐藏
- C++成员函数的重载、覆盖与隐藏
- 成员函数的重载、覆盖与隐藏
- 成员函数的重载、覆盖与隐藏