今天在写代码时发现对继承后的函数访问权限不太清楚,于是自己做了个测试:
1.头文件(test.h)
1 #include <iostream>
2 using namespace std;
3 4 class A{ 5 private: 6 void print(){ 7 cout << "this is A" << endl; 8 } 9 }; 10 11 class B:public A{
};
A为基类,B为A的子类.
2.源文件(test.cpp)
1 #include "test.h" 2 3 void main() 4 { 5 B* pB = new B(); 6 pB->print(); 7 8 getchar(); 9 getchar(); 10 }
因为B从A类继承了函数print并且同时继承了print的访问权限,所以此时编译不通过.
3.修改后的头文件(test.h)
1 #include <iostream> 2 using namespace std; 3 4 class A{ 5 private: 6 void print(){ 7 cout << "this is A" << endl; 8 } 9 }; 10 11 class B:public A{ 12 public: 13 void print(){ 14 cout << "this is B" << endl; 15 } 16 };
子类B重写了A的print函数,此时编译成功,运行如下:
4.总结
当一个类从另一个类继承后,基类成员函数的访问权限为默认的继承权限,若子类自己重写了此函数,则访问权限变更为子类设置的访问权限.简言之,子类设置的函数访问权限优先于从基类继承后语法默认的访问权限.