前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shadow、overload、override

shadow、overload、override

作者头像
我与梦想有个约会
发布2023-10-20 16:45:09
820
发布2023-10-20 16:45:09
举报
文章被收录于专栏:jiajia_dengjiajia_deng

shadow(阴影)、overload(重载)、override(覆写),这三个概念一直有人非常混淆,很幸运,经过老师的悉心教导,我总结了一下三个概念的不同之处。 shadow:发生在父子之间,需要函数名相同即可构成 shadow (阴影),构成 shadow 后可通过域运算符来访问对应类中的函数。

代码语言:javascript
复制
#include 
using namespace std;
class A
{
public:
void display()
{
cout << “A display” << endl;
}
};
// B 继承了 A
class B : public A
{
public:
void display()
{
cout << “B display” << endl;
}
};
int main(int argc, char* argv[])
{
B b;
b.display();
// 域运算符来访问对应类中的函数
b.A::display();
return 0;
}

overload:发生在同一作用域内(同一个类中)。同名,参数不同(类型、个数、顺序)无关返回值就会构成 overload (重载)。

代码语言:javascript
复制
#include 
using namespace std;
class A
{
public:
void display()
{
cout << “A display” << endl;
}
// 构成重载
void display(int i)
{
cout << “A display int” << endl;
}
};
int main(int argc, char* argv[])
{
A a;
a.display();
a.display(10);
return 0;
}

override:发生在派生类中,实现了父类的虚函数成为 override(覆写),需要函数名、返回值、参数个数及类型都一模一样,函数体可以不同。虚函数在后面会有详细介绍。

代码语言:javascript
复制
#include 
using namespace std;
class A
{
public:
virtual void display()
{
cout << “A display” << endl;
}
};
class B : public A
{
public:
// 继承了A类,
void display()
{
cout << “B display” << endl;
}
};
int main(int argc, char* argv[])
{
// 多态小例子
A *a = new B;
a->display();
return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档