类的覆盖、重载和隐藏
来源:互联网 发布:淘宝每日抽红包链接 编辑:程序博客网 时间:2024/05/16 12:11
覆盖:在基类中将一个成员函数的声明为虚函数,那么子类中所有与该函数具有相同函数原型(返回类型、函数名、参数表、常量属性、异常说明都相同)的成员函数就可以对基类中的虚函数形成覆盖
重载:在同一个作用域中,函数名相同,参数表不同的函数构成重载关系
隐藏:派生类的函数屏蔽了与其同名的基类函数
举例:
classA {
public:
void foo (void); // a
int foo (double); // b
virtual void foo (void) const; //c
};
classB : public A {
public:
void foo (void); // d
void foo (void) const; // e
int foo (void) const; // f
};
a-b-c:重载
f:非法覆盖
d-e:重载
e-c:覆盖
d-a:隐藏
d-c:隐藏
关于多继承同名隐藏:在没有虚函数的情况下,如果某派生类的多个基类拥有同名的成员,同时,派生类又新增这样的同名成员,在这样的情况下,派生类成员将隐藏所有基类的同名成员。
#include<iostream>
using namespace std;
class B1
{
public:
int nv;
void fun(){
cout<<"Member of B1"<<endl;
}
};
class B2
{
public:
int nv;
void fun(){
cout<<"Member of B2"<<endl;
}
};
class D1:public B1,public B2
{
public:
int nv;
void fun(){
cout<<"Member of D1"<<endl;
}
};
int main()
{
D1 d1;
d1.nv=1;
d1.fun();
d1.B1::nv=2;
d1.B1::fun();
d1.B2::nv=3;
d1.B2::fun();
return 0;
}
运行结果:
Member of D1
Mwmber of B1
Member of B2
这里将通过作用域分辨符(::)明确的惟一标识了派生类中由基类所继承来的成员,达到访问的目的,解决成员被隐藏的问题。
如果某个派生类的部分或者全部直接基类是从另一个共同的基类派生而来,在这些直接的基类中,从上一级基类继承来的成员就拥有相同的名称,因此派生类中也会产生同名现象,对这种类型的同名成员也要使用作用域分辨符来惟一标识,而且必须用直接基类来进行限定。
举例如下:
#include<iostream>
using namespace std;
class B0
{
public:
int nv;
void fun()const{
cout<<"Member of B0"<<endl;
}
};
class B1:public B0
{
public:
int nv1;
};
class B2:public B0
{
public:
int nv2;
};
class D1:public B1,public B2
{
public:
int nvd;
void fun()const{
cout<<"Member of D1"<<endl;
}
};
int main()
{
D1 d1;
d1.B1::nv=2;
d1.B1::fun();#include<iostream>
using namespace std;
class B0
{
public:
int nv;
void fun()const{
cout<<"Member of B0"<<endl;
}
};
class B1:public B0
{
public:
int nv1;
};
class B2:public B0
{
public:
int nv2;
};
class D1:public B1,public B2
{
public:
int nvd;
void fun()const{
cout<<"Member of D1"<<endl;
}
};
int main()
{
D1 d1;
d1.B1::nv=2;
d1.B1::fun();
d1.B2::nv=3;
d1.B2::fun();
return 0;
}
运行结果:
Member of B0
Member of B0
- 类的覆盖、重载和隐藏
- 隐藏 重载和覆盖
- 重载,覆盖和隐藏
- 重载、覆盖和隐藏
- 重载、覆盖和隐藏
- 隐藏、覆盖和重载
- 重载、覆盖和隐藏
- 重载、覆盖和隐藏
- 类成员函数的重载、覆盖和隐藏的区别
- 类成员函数的重载、覆盖和隐藏的区别
- 类成员函数的重载、覆盖和隐藏区别
- C#的抽象类和方法,重载,覆盖,隐藏
- 类成员函数的重载、覆盖和隐藏区别
- 类成员函数的重载、覆盖和隐藏区别
- 类成员函数的重载、覆盖和隐藏区别
- 类成员函数的重载、覆盖和隐藏区别
- 类成员函数的重载、覆盖和隐藏区别?
- 类成员函数的重载、覆盖和隐藏区别?
- FatMouse' Trade 解题报告
- 嵌入式系统开发学习如何起步、如何深入
- Using UIPageControl as a container UIViewController
- MySQL engine/type类型InnoDB/MYISAM/MERGE/BDB/HEAP的区别
- J2EE加载spring
- 类的覆盖、重载和隐藏
- linux下 SVN用法
- android 获取系统时间
- Test@Office: 每周测试会议
- ulimit使用
- CProgressCtrl控件 VC++
- LDAP快速入门
- MSSQLServer连接字符串书写便捷方法
- Linux常用命令全集