C++对象同名内容调用
通过子类调用父类的同名内容,需要加上作用域
方法:子类.FATHER::函数();
子类.FATHER::变量;
代码示例:
#include "iostream"
using namespace std;
class FATHER {
public:
FATHER() : a(20) {};
int a;
void print_fun() {
cout << "father_printf" << endl;
}
};
class son : public FATHER {
public:
son() : a(10) {};
int a;
void print_fun() {
cout << "son_printf" << endl;
}
};
int main() {
son cla_son;
cout << cla_son.a << endl;
cout << cla_son.FATHER::a << endl;
cla_son.print_fun();
cla_son.FATHER::print_fun();
}
输出结果
10
20
son_printf
father_printf
特殊情况:当父类出现函数重载时,不添加作用域编译器并不能根据重载参数判断父类子类
原因:当子类出现和父类同名函数时,就会屏蔽所有父类函数,自然不能根据重载参数区分了
解决方法: 加入作用域,内容同上
错误示例:
#include "iostream"
using namespace std;
class FATHER {
public:
FATHER() : a(20) {};
int a;
void print_fun() {
cout << "father_printf" << endl;
}
void print_fun(int num) {
cout << "father_printf _num" << endl;
}
};
class son : public FATHER {
public:
son() : a(10) {};
int a;
void print_fun() {
cout << "son_printf" << endl;
}
};
int main() {
son cla_son;
cout << cla_son.a << endl;
cout << cla_son.FATHER::a << endl;
cla_son.print_fun();
cla_son.FATHER::print_fun();
cla_son.print_fun(10);//错误代码,报错处
}
可以看到编译器在这里并不能由函数重载定位到父类的函数