当前位置: 首页 > news >正文

西宁做网站公司电话百度一下百度搜索入口

西宁做网站公司电话,百度一下百度搜索入口,松岗建设网站,用dw做的网页如何上传到网站在C中,允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 …

在C++中,允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。

重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。

当调用一个重载函数或重载运算符时,编译器通过把使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。

重载对于C++编程来说,其重要意义不言而喻,然而面试官常问的不仅是重载,还会问到重写和重定义。这让许多面试者都会感到一头雾水。

所以今天我们就来聊聊重载、重写和重定义之间的区别。

一、概念梳理

(1)重载

重载分为两种类型,一种是函数重载,另一种是运算符重载。

一般指函数重载,即相同作用域中被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数(即多个函数具有相同的名字),但参数的数目和类型各不相同(其中数目和类型均相同,如果顺序不同也是可以的),然后根据参数列表确定调用哪个函数。
​ 特点: ​
①这里主要考虑的是面向对象,在面向对象中,重载只是在类的内部存在,即同一个类中。抛除面向对象的话,在同一个作用域中即可。
②函数名相同,参数列表不同 ​
③重载不关心函数返回类型,不能靠返回类型来判断。

class A
{public:void test(int i);void test(double i);			//overloadvoid test(int i, double j);		//overloadvoid test(double i, int j);		//overload
};

(2)重写(又叫“覆盖”)

指派生类中存在重新定义的基类函数。
特点:
①其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致,只有函数体不同(花括号内)。 ​
②派生类调用时会调用派生类的重写函数,不会调用被重写函数。
③重写的基类中被重写的函数必须有virtual修饰。

#include<iostream>
using namespace std;//基类
class Base
{
public:virtual void fun(int i){ cout << "Base::fun(int) : " << i << endl;}
};//派生类
class Derived : public Base
{
public:virtual void fun(int i){ cout << "Derived::fun(int) : " << i << endl;}
};int main()
{Base b;Base * pb = new Derived();pb->fun(3);				//Derived::fun(int)system("pause");return 0;}

(3)重定义(又叫“隐藏”)

指派生类的函数屏蔽了与其同名的基类函数。
特点:
①函数名称相同,但是返回值可以不同。
②作用域分别位于基类和派生类之中;
注意:
①如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无virtual,基类的函数被隐藏。
②如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有vitual关键字,此时,基类的函数被隐藏。
所以,此处只要求是同名函数,不管参数列表是否相同,基类函数都会被隐藏。

class A
{
public:void fun(){cout<<"A"<<endl;}virtual void fun1(int i,int j){cout << "A::fun() : " <<i<<" "<<j<<endl;}
};class B:public A
{
public://两个函数参数相同,但基类函数不是虚函数。void fun() //隐藏父类的 fun 函数{cout<<"B"<<endl;}//两个函数参数不同,无论基类函数是否是虚函数,基类函数都会被屏蔽。virtual void fun1(double i) //重写基类A中的fun1(){cout << "B::fun(): " << i << endl;}
}int main()
{B b;b.fun3(5);//b.fun3(1, 2);隐藏了基类的同名函数,所以不能运行return 0;
}

2.区别对比

(1)重载和重写的区别:

​①作用域的区别 :一个在同一类中,另一个在不同的类中 (面向对象)。

​即重载是函数名相同,参数列表不同 重载只是在类的内部存在;重写是子类重新定义父类中有相同名称和参数的虚函数,函数特征相同,但是具体实现不同,主要是在继承关系中出现的 。所以,重载和被重载的函数在同一类中;重写和被重写的函数在不同的类中,即分别位于基类和派生类中。

​②参数的区别 :一个参数列表一定不同,另一个参数列表一定相同。

​即重载和被重载的函数参数列表一定不同,重写与被重写的函数参数列表一定相同。

​③virtual的区别:一个可以有virtual修饰,也可以没有;另一个必须有virtual修饰。

​即重载函数和被重载函数可以被virtual修饰,也可以没有,重写的基类必须要有virtual修饰。
(2)重载、隐藏重写和的区别:

​①作用域区别: 重载的范围在同一类中;重写函数和被重写函数、隐藏函数和被隐藏函数均在不同类中。 ​ ②参数的区别: 隐藏函数和被隐藏函数参数列表可以相同,也可以不同,但函数名一定同;当参数不同时,无论基类中的函数是否被virtual修饰,基类函数都是被隐藏,而不是被重写。

总结:

​所以,想要区分这三个概念,可以关注它们概念的本质不同,再分别从作用域、参数等方面对区别进行细致比对,从而完成区别的总结。

http://www.hkea.cn/news/205824/

相关文章:

  • wordpress后台加统计代码seo建站的步骤
  • 怎么做外贸网站的邮箱签名搜索引擎优化是指什么
  • 网页制作基础教程免费邯郸网站seo
  • phpcms做网站感想漯河seo推广
  • 公司部门kpi绩效考核指标模板河北百度seo软件
  • 印团网网站是哪家做的唯尚广告联盟
  • 网红营销网站seo综合查询怎么用的
  • 西安地区网站建设云推广
  • wordpress个人站2020年关键词排名
  • 网站建设企业公司石家庄新闻头条新闻最新今天
  • 道滘镇做网站百度统计
  • qq空间做宣传网站怎样建立自己的网站平台
  • 做设计一般用的素材网站是什么意思刷网站排名软件
  • 帮人做兼职的网站吗青岛seo服务哪家好
  • 贷款类网站怎样做网络营销的推广
  • 乐清做网站哪家好税收大数据
  • 校园网站建设需求天津放心站内优化seo
  • 哈尔滨微网站建设热搜在哪里可以看
  • 网站用oracle做数据库福州seo推广服务
  • 康保县城乡建设委员会网站营销型网站重要特点是
  • 手机做网站的步骤跨境电商有哪些平台
  • 请人做网站要多少网络事件营销
  • 网站页脚有什么作用厦门seo哪家强
  • 东莞百度提升优化优化推广网站推荐
  • 查企业网站有哪些站长统计app软件
  • 做a高清视频在线观看网站济源新站seo关键词排名推广
  • 刚做的网站怎么搜索不出来百度seo收录软件
  • 视频拍摄app站长工具seo综合查询广告
  • 新闻单位建设网站的意义武汉seo推广优化
  • 低价网站公司软文怎么写