首页 >  知识中心 >  新闻详情

派生类可以访问基类的 关于派生类访问基类私有成员的问题

来源:朵拉利品网  |  2019-07-24 20:25:54

1, 关于派生类访问基类私有成员的问题



基类private的成员是不能够在派生类中被访问到的。你可以这样解决:一种方法是把基类中你想在派生类访问的改成protected访问权限。比如:class yuan
{protected:
double r;
};现在你可以在派生类访问r了。
另一种方法是在基类中添加一个成员函数来获取这个成员变量的值。class yuan
{
double r; public:double GetValueR(){return r;}
};现在你可以在派生类调用GetValueR来获取R值。但是注意GetValueR()这个函数的访问权限必须是public或者protected,如果它本身也是private那么就跟r一样,在派生类是无法访问的了。

2, 派生类到基类转换的可访问性



先声明一下,个人意见而已。
其实语言的实现在CPU来说是没有能力区别的,CPU只是知道 地址,二进制 等等。而一切语言的特性是人为规定的,而且是由编译器来限制的,并不是说是因为CPU或电路板上就规定了。所以说,你要严格去遵循语言标准,并同时参考编译器的特性。
对于你说的这个,C++里面叫多态,多态的性质就是规定了在编译时不去进行判断类的具体情况,也就是不去硬编码,而是在运行时决定是基类还是派生类,到时候才会决定调用哪一个的方法。
所以,你传给函数myfun()的参数肯定是在运行时具体确定是哪一个类,如果这样的话,那么你传的是子类,它就会调用子类的方法。至于你说子类的方法是私有的,那就是编译器的实现问题了,我估计它是没有检验子类的重写函数的私有性质,只是返回值、名称、参数一致就通过了。但是它肯定检测基类的了,不信你试试将基类的虚函数写成私有的,肯定运行报错。
所以我只能告诉你,这就是语言的标准和编译器的实现问题,否则你说是遵循多态的定义标准好呢还是遵循私有性好呢?这在编译器实现时是个困难的抉择吧!

相关概念


多态

  多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。C++中的多态性具体体现在运行和编译两个方面。运行时多态是动态多态,其具体引用的对象在运行时才能确定。编译时多态是静态多态,在编译时就可以确定对象使用的形式。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

 
相关新闻
桩基 桩基有几种类型? 06-16
天目论坛怎么不能访问了 一直用的论坛为什么无法访问 07-22
派生类可以访问基类的 关于派生类访问基类私有成员的问题 07-24
蛋类的食物 含优质蛋白类的食物有哪些 08-08
基装包含哪些项目 基装包括哪些 10-22
基装 基装主要指什么,主材包括些什么? 10-22
基装包含哪些项目和材料 基装包括哪些材料 10-22
基桩钢筋笼 基桩的主筋为什么钢筋直径一样长度却不一样? 10-22
基装和整装有什么区别 整装跟基装的区别有哪些 10-22
狼域名访问升级 访问页面已升级是什么意思?怎么解决? 01-06
相关产品
紫荆花漆低味多功能硝基漆 家具木器油漆 硝基金属漆清味漆白漆 06-20
一基马抗痢疾血清 标准品 07-02
天视威科技-铝基 单面超白油黑字无铅喷锡吸顶灯铝基套板厚度1.6 07-20
广州批发腐熟发酵脱脂松树皮松鳞兰花月季基质松树皮铁皮石斛基质 07-20
厂家直销大包装栽培基质---打磨松树皮/松鳞栽培基质 07-20
批发腐熟发酵脱脂松树皮 松鳞兰花月季基质 松树皮铁皮石斛基质 07-20
【混批】厂家直销大包装栽培基质---松树皮/松鳞栽培基质 07-20
双(2,2,6,6-四甲基-4-哌啶基)癸二酸酯氮氧自由基厂家南箭牌 07-23
墙纸基膜 环保基膜墙面基膜/墙纸胶水 08-04
JGT376-C 砂基透水砖抗冲击试验机 砂基透水砖抗冲击性能试验机 08-08

大家都在看