企业搭建自己的网站,杭州网站seo外包,百度app怎么打开,怎样选择网站的关键词1.重载#xff1a;重载从overload翻译过来#xff0c;是指同一可访问区内被声明的几个具有不同参数列#xff08;参数的类型#xff0c;个数#xff0c;顺序不同#xff09;的同名函数#xff0c;根据参数列表确定调用哪个函数#xff0c;重载不关心函数返回类型。
示…1.重载重载从overload翻译过来是指同一可访问区内被声明的几个具有不同参数列参数的类型个数顺序不同的同名函数根据参数列表确定调用哪个函数重载不关心函数返回类型。
示例代码如下 1 2 3 4 5 6 7 8 class A{ public: void test(int i); void test(double i); void test(int i, double j); void test(double i, int j); int test(int i); //错误非重载 };
前四个互为重载函数最后一个和第一个不是重载函数。
2.隐藏隐藏是指派生类的函数屏蔽了与其同名的基类函数。注意只要同名函数不管参数列表是否相同基类函数都会被隐藏。
#includeiostream
using namespace std;
class A {
public:void fun1(int i, int j) { cout A::fun1() : i j endl; }
};class B : public A {
public://隐藏void fun1(double i) { cout B::fun1() : i endl;}
};int main()
{B b;b.fun1(5); //调用B类中的函数b.fun1(1, 2); //出错因为基类函数被隐藏return 0;
}
3.重写重写翻译自override也翻译成覆盖更好一点是指派生类中存在重新定义的函数。其函数名参数列表返回值类型所有都必须同基类中被重写的函数一致。只有函数体不同花括号内派生类调用时会调用派生类的重写函数不会调用被重写函数。重写的基类中被重写的函数必须有virtual修饰。
实例代码如下
#includeiostream
using namespace std;
class A {
public:virtual void fun3(int i) { cout A::fun3() : i endl; }};
class B : public A {
public://重写virtual void fun3(double i) { cout B::fun3() : i endl; }
};
int main()
{A a;B b;A* pa a;pa-fun3(3);pa b;pa-fun3(5);return 0;
}
重载和重写的区别
范围区别重写和被重写的函数在不同的类中重载和被重载的函数在同一类中。参数区别重写与被重写的函数参数列表一定相同重载和被重载的函数参数列表一定不同。virtual的区别重写的基类必须要有virtual修饰重载函数和被重载函数可以被virtual修饰也可以没有。
隐藏和重写重载的区别
与重载范围不同隐藏函数和被隐藏函数在不同类中。参数的区别隐藏函数和被隐藏函数参数列表可以相同也可以不同但函数名一定同当参数不同时无论基类中的函数是否被virtual修饰基类函数都是被隐藏而不是被重写。参考资料
1. C中重载、重写覆盖和隐藏的区别实例分析