网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
class A {
int i;
void privateFunc() {
cout<<“this is a private function of base class”<<endl;
}
public:
A(){i=5;}
int getI() {
return i;
}
void usePrivateFunc() {
privateFunc();
}
};
class B:public A {
public:
void printBaseI() {
cout<<getI()<<endl;
}
void usePrivateFunction() {
usePrivateFunc();
}
};
int main() {
B b;
b.printBaseI();
b.usePrivateFunction();
}
程序输出结果:
5
this is a private function of base class
在类 B 中,由于基类A的成员变量i和成员函数 privateFunc() 都是私有的,所以在类 B 的成员函数中无法直接访问到它们。但是,由于类 A 的公有成员函数 getI() 可以访问到私有成员变量 i,而 usePrivateFunction() 可以访问私有成员函数 privateFunc(),所以在类 B 中通过调用函数 getI() 和 usePrivateFunc() 就可以间接访问基类 A 中的私有成员。
## 2.私有成员会被继承吗
如果基类中并没有提供访问私有成员的公有函数,那么其私有成员是否“存在“呢?还会不会被继承呢?其实,这些私有成员的确是存在的,而且会被继承,只不过程序员无法通过正常的渠道访问到它们。考察如下程序,通过一种特殊的方式访问了类的私有成员。
#include
using namespace std;
class A {
int i;
void privateFunc()
{
cout<<“this is a private function of base class”<<endl;
}
public:
A(){i=5;}
};
class B:public A {
public:
void printBaseI() {
int* p=reinterpret_cast<int*>(this);//获取当前对象的首地址
cout<<*p<<endl;
}
void usePrivateFunction() {
void (\*func)()=NULL;
_asm
{
mov eax,A::privateFunc;
mov func,eax;
}
func();
}
};
int main() {
B b;
b.printBaseI();
b.usePrivateFunction();
}
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
68825)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!