&1:C++中函数的复写和重载冲突问题
子类函数对积累函数进行复写(覆盖)隐藏:隐藏是指派生类的函数屏蔽了与其同名的基类函数。注意只要同名函数,不管参数列表是否相同,基类函数都会被隐藏。可以通过类的作用运算符访问积累中被隐藏的方法和数据。
#include<iostream>
using namespace std;
class first
{
public:
first(){
a = 3;
};
void output(){
a = 1;
cout<<"a="<<a<<endl;
}
private:
int a;
};
class second:public first
{
public:
second():first(){
};
//对first中的函数进行重写,基类中的output函数被隐藏
//当定义子类对象时,只能直接调用子类output,类作用域运算符调用基类
void output(int b){
cout<<"b="<<b<<endl;
}
void output(){
cout<<"c="<<3<<endl;
}
private:
};
int main(){
second test;
test.first::output();//这应该是一种强制类型转换(不要与java混淆!)
test.output(3);
cout<<"------------------"<<endl;
first *test1;
test1 = new second;//这里发生了强制类型转换吧
test1->output();//这个函数是指向基类的函数的
return 0;
}
其中在类second函数中,不存在没有参数的output,因为重写已经覆盖掉first中函数output()
如果想要调用基类中的无参函数需要使用类作用域运算符