子类如何通过指针访问父类私有成员
本帖最后由 爱学习520 于 2020-8-11 16:31 编辑99%的书上和老师都说子类不能访问父类私有成员,真的吗?程序告诉你这都是扯谈,所谓的不能访问,只是编译器层面的规则导致不能访问,我用指针绕开编译器不就行了。
所以下次再说不能访问,加个前提,是编译器规则导致不能访问,不能误人子弟
所以,学习一门语言,实际上本质就是在学编译器的规则,编译器规定你不能这样访问是为了更好的实现封装,实现语言特新。但是,有时候应该看看编译器是怎么工作的会更好的理解并学好一门语言,上面的地址访问方式本质就是编译器的实现方式,用地址,大家可以去看看反汇编代码就知道了,我是看的反汇编代码才知道编译器底层是这样做的
牛{:10_250:} 是编译器规则导致不能访问,不能误人子弟抱歉,这是语言规定,而且你的方法也不一定行得通。 永恒的蓝色梦想 发表于 2020-8-11 13:51
抱歉,这是语言规定,而且你的方法也不一定行得通。
我上面是说了编译器的规则呀,高级语言就是适应编译器的规则呀,所以从这个角度来说是正确的,规定不能访问。第二个你说方法不一定行得通,那实际案例说。 好的代码要可读性好,可维护性好,可移植性好,而不是玩奇技淫巧。 xieglt 发表于 2020-8-11 14:26
好的代码要可读性好,可维护性好,可移植性好,而不是玩奇技淫巧。
你和我说的都不是一个层面的东西,我没有说这样写代码,说的是学一门语言应该看看底层是这么做的,这实际上就是编译器的底层实现,我不相信一个人明白编译器是怎么做的,还学不好或者说学不透C++的本质。所以我说的是一种学习角度,而你说的是使用角度 爱学习520 发表于 2020-8-11 14:11
我上面是说了编译器的规则呀,高级语言就是适应编译器的规则呀,所以从这个角度来说是正确的,规定不能访 ...
高级语言就是适应编译器的规则因果关系错误。编译器规则适应高级语言。
我用位域你怎么办?内存对齐怎么办?
https://blog.csdn.net/yu132563/article/details/83504120 本帖最后由 爱学习520 于 2020-8-11 15:28 编辑
永恒的蓝色梦想 发表于 2020-8-11 14:59
因果关系错误。编译器规则适应高级语言。
我用位域你怎么办?内存对齐怎么办?
https://blog.csdn. ...
你这个对齐的问题挺好的。其实也好解决,对齐规则,比如像上面结构体,取成员变量最大的那个字节对齐,比如char、int,那编译器会给char分配实际四个字节,所以在加地址的时候,char这块就得+4后才能访问到接下来的int,不能像上面那样+1.当然,除了你说的字节对齐外,还有其他问题,比如并不是所有机器int都是4个字节等等。所以,还是我上面说的那句话,如果确定当前你所使用的编译器是怎么分配的内存字节的,就一定可以正确访问到。所有,我只是想表达,学习一门语言应该去了解本质,而不是说编译器不能就以为不能,并不是说这样写代码,而是去更好的理解。很多游戏都是C++写的,那么是否可以利用指针去修改游戏运行时的私有数据呢?这不就是一种可以考虑的方式吗,所以,理解本质,我只想表达这个,而帖子最上面表达的,只是想说不要被规则给限制了理解 爱学习520 发表于 2020-8-11 15:21
你这个对齐的问题挺好的。其实也好解决,对齐规则,比如像上面结构体,取成员变量最大的那个字节对齐, ...
说的不错。 爱学习520 发表于 2020-8-11 15:21
你这个对齐的问题挺好的。其实也好解决,对齐规则,比如像上面结构体,取成员变量最大的那个字节对齐, ...
不。有些编译器还有优化。
页:
[1]