Protected or Private?

面向对象测试题(含答案和解析) 1.int[] my_Array; my_Array=new int[5]; for(int count=0;count<=5;count++)数组下标越界 System.out.println(my_Array[count]); 以上Java代码运行的结果是(D d )。 A.将1,2,3,4,5输出到屏幕 B.将0,1,2,3,4输出到屏幕 C.将0,1,2,3,4,5输... 阅读详情
作为父类的设计者,你可能会踌躇到底应该使用protected还是private来描述你的成员。那么,让我们来看看下面几个Sample吧:

1、不相关的类访问protected成员

void B::yourfun(A &a)
{
    class ASpe:public A
    {
        friend class B;
    };
    static_cast<ASpe &>(a).ProtectFun();
}

尽管static_cast<ASpe &>的结果是undefined,但是因为这里的static_cast通常都是no-op,而且编译器一般都会对ASpe作空派生类优化,因此上面的代码在实际应用中几乎肯定可以成功。

对于一个恶意用户而言,他的目的已经达到了。

2、调用纯虚函数

class A {
protected:
    virtual void Fun() =0;
};

class B:public A
{
public:
    B() {Dummy();}

private:
    void Dummy() {Fun();}
};
class C:public B
{
public:
    virtual void Fun() {}
};

你觉得不可能调用传说中的纯虚函数?你想看看_purecall到底会作些什么?试试上面的代码吧。问题的根源在于父类将Fun声明成了protected。
当然你不应当在ctor里调用virtual函数,但是你在ctor调用Dummy的时候,并不一定会注意到Dummy内部会调用virtual函数,于是灾难发生了
如果你仅仅希望子类在virtual函数中提供某种行为,那么把这些函数声明成private吧

尽管上面的代码都不符合标准,但是至少说明,你的用户可以利用你提供的protected权限实现一些你并不希望赋予子类的功能。
如果你觉得连private都不放心(譬如邪恶的#define private public,当然它违反了标准17.4.3.1.1,因此结果是不可预期的),那么你最好使用PImpl来实现你的接口

相关推荐

n8n实战:动态报表生成与企业微信自动化推送

本文详细介绍了如何利用n8n实现动态报表生成与企业微信自动化推送的全流程。通过配置n8n Form触发器、智能报表生成核心逻辑以及企业微信Webhook推送,帮助企业大幅提升数据收集与报表推送效率,实现从数据录入到报表推送的全自动化处理。

weixin_29267307的博客 304

JAVA中MyString类的测试_面向对象测试题(含答案和解析)

1.int[] my_Array;my_Array=new int[5];for(int count=0;count<=5;count++)数组下标越界System.out.println(my_Array[count]);以上Java代码运行的结果是(D d )。A.将1,2,3,4,5输出到屏幕B.将0,1,2,3,4输出到屏幕C.将0,1,2,3,4,5输出到屏幕D.将出现运行时异常...

weixin_29295541的博客 1284

针对中文CLIP模型训练失效的解决方案记录

解决了中文CLIP模型无法正确训练的问题

weixin_45906434的博客 1619

读C++标准系列 - 8.3.6 缺省参数

返回目录缺省参数不能出现在函数指针、函数引用以及typedef中(8.3-3)缺省参数可以在不同的声明中逐步给出(8.3-4)不同作用域的声明中定义的缺省参数是独立的,互不影响;同一作用域的声明中不能重复定义同一个参数的缺省值。看个例子就明白了: void f(int, int); void f(int, int = 7); void f(int = 7, int); //这句如果提到上一句前面就

Van's House 1666

远心F-theta镜ZEMAX设计

根据给出的F-theta镜的设计指标,对F-theta镜进行了具体的光学设计。从对F-theta镜设计思想的介绍出发,对选取的初始结构进行了优化设计,优化完成后,对所设计的F-theta镜进行了像质评价,通过点列图、场曲与畸变图、相对照度、能量集中度对所设计的F-theta镜进行了分析,最终,对F-theta镜的设计效果进行了验证。

hitliuyi17的博客 9419

以太网GMAC-RK3568

第 2 章和第 3 章中针对 RMII/RGMII 接口芯片和 USB 以太网两种类型芯片在 SDK 上的配置做详细的描述,第 4 章介绍以太网在 Android 上的相关调用接口。第 5 章提供常见问题的排查建议由于在 RK 系列的 SoC 中内置了以太网 MAC 控制器,所以只需要搭配一颗以太网 PHY 芯片,即可实现以太网卡功能按照规范,即使是不同厂家的 PHY,仍然有一部分寄存器的定义是通用的,只要配置了这些通用的寄存器,基本上 PHY 就可以正常工作代码位置在。

qq_24093081的博客 1942

Windows编程好书推荐

Writing Secure Code, Second Edition作者:Michael Howard, David C. LeBlancISBN:0735617228Microsoft Windows Internals, Fourth Edition作者:Mark E. Russinovich, David A. SolomonISBN:0735619174To be continued..

Van's House 1623

uniapp [移动端H5网页] - 强力解决弹起软键盘后页面被挤压变形或页面整体上移问题,点击input输入框键盘弹出底部被上推往上顶遮挡及各种问题(兼容安卓苹果ios手机,微信公众号网页也适用)

uni-app,h5网页,input输入框组件,uniapp h5软键盘弹出,uni-app 输入框,键盘弹起时页面整体上移问题,uni,H5页面,解决软键盘弹起页面被挤压、被往顶的问题,解决uni-app 输入框,键盘弹起时页面整体上移问题,uniapp调用手机系统软键盘,页面窗口被顶起,布局定位失效,解决uniapp软键盘弹起导致页面fixed定位元素被顶上去,输入法软键盘弹起,窗口顶起,变形解决办法,UniApp中input组件在IOS设备上弹出软键盘时页面整体上移问题的解决方案,以及input组件聚

🏆 前端领域优质创作者 1万+

C++ Internals: 序言

要深入了解一门语言,必须同时了解其内部机理,这样才能合理高效的使用它。本系列文章旨在介绍C++各种特性是如何实现的。VC RTTI C++ Internals: VC RTTI - 基本数据结构 C++ Internals: VC RTTI - typeidC++ Internals: VC RTTI - dynamic_cast (1) C++ Internals: VC RTTI - dyn

Van's House 4412

顶刊论文引言用AI怎么写?借助Gemini 3 Pro结合四段式写出逻辑清晰的Introduction

写研究目标时,先明确研究问题,直接回应前文提到的研究缺口,如 “This study aims to investigate whether X modulates Y via the Z pathway in human cells.”然后再提出你的研究假设,当理论依据清晰时,可以用如 “We hypothesized that inhibiting X would rescue Y deficiency in this model.”的句子点出研究目标。要求:1)明确陈述本研究拟解决的核心科学问题;

智能AI让学术科研更容易 180

【YOLOv11】087、YOLOv11多任务学习:检测、分割、分类联合学习

摘要: 工业质检场景中,多任务模型(检测、分类、分割)的需求日益增长。针对边缘设备部署的挑战,本文提出基于YOLOv11的多任务学习方案。通过共享主干网络和设计分支头(检测、分割、分类),实现高效推理;采用动态权重平衡策略解决多任务损失不平衡问题;并优化数据流处理(支持部分标注)和推理剪裁(按需启用分支)。实验表明,该方法在Jetson Orin上帧率提升3倍,内存占用减少40%,为工业质检提供了轻量高效的解决方案。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 445

private ;protected

private 是完全私有的,只有当前类中的成员能访问到. protected 是受保护的,只有当前类的成员与继承该类的类才能访问. 这两个是访问类中成员权限的限制符.在类外如果想使用类中的成员,只能直接使用public类型的,protected和private都是不能访问的,对于类外使用而言,这两个是完全相同的. 但是在基类的派生类中,可以直接访问继承而来的protecte

taotaoahui 441

【AI智能体】Skills 智能体驱动开发从使用到项目实战详解

Skills 智能体驱动开发从使用到项目实战详解

congge 6599

c++中public、protected、private的区别

访问权限的区别 public:可以被类成员函数、本类对象、本类派生类访问。 protected:只允许本类的成员函数、本类派生类访问 private:只允许本类的成员函数访问 对于类的成员函数而言,public、protected、private没有区别。 访问权限:类的成员函数&gt;本类派生类&gt;本类对象。 三种继承的区别: ...

foroverontheroad的博客 497

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

public,protected,private问题

一直没扯清这几个访问限定符,这次用vs2010下用代码实验下,记录如下: class Base{ public: Base(string book_a = " ", double price_a = 0.0): book(book_a), price(price_a) {} protected: double price; private: string book; }

594

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

权限访问修饰符public,protected,private

<?php header("content-type:text/html;charset='utf-8'"); /*访问类型 private protected public 同一个类中 √ √ √ 类的子类中 √ √ 所有的外部成员

天下熙熙,皆为利来;天下攘攘,皆为利往。 500

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

public、protected及private继承区别

在继承时采公开(public)继承的方式来继承一个类别时,父类别与子类别为"is-a"的关系,子类别继承父类别的公开(public)介面及受保护(protected)的成员,子类别是父类别的细化型态。 保护(protected)继承可以改变继承下来的基底类别成员权限,保护的意思就是让这些成员继承下来之后,保护它们仅能在类别与衍生类别中使用,保护继承的语法如下所示: class B : prot...

weixin_30898109的博客 77

C++中public、protected、private的区别

第一: private,public,protected的访问范围:   private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问 public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问 注:友元函数包括两种:设为

SCOTT 技术博客 5万+

C++中的private, public, protected

Private, Public, and Protected in C++

scott198512的博客 1万+

C++中public,protected,private的区别

C++中关于public、protect、private的访问权限控制(实例)

ken2232的博客 9982

public、private、protected的区别

在成员访问模式中: public 表示共有;类的数据成员和函数可以被该类对象和派生类访问。 private 私有型;自己的类可以访问,但派生类不能访问。 protected 保护型;自身类和派生类可以访问相当于自身的private型成员,它同private的区别就是在对待派生类的区别上。 C++中 public,protected, private 访问标号小结 第一:private, public, protected 访问标号的访问范围。 private:只能由1.该类中的函数、2.其友元函数访问。不能

weixin_50849959的博客 5万+

private、public、protected

第一: private,public,protected的访问范围: private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问 public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问 注:友元函数包括两种:设为友元的全局...

Hello,小高同学 5280

public、private 和 protected

修饰符类内部子类外部代码友元public✔✔✔✔protected✔✔✖✔private✔✖✖✔。

weixin_48835186的博客 1500

java中public、private、protected的区别

java中public、private、protected的区别 在java中通过三个关键字public、private、protected在类的内部来进行边界的设定,这些访问指定词(access specifier)决定了紧跟其后被定义的东西可以被谁访问。 public:表示紧跟其后的成员可以被任何人引用private:表示紧跟其后的成员除了类型创建者和类型内部的方法,任何人都不可引用,否者程序编译报错protected:protected关键字与private效果相当,差别仅在于继承的类可以访.

ZuoQuDeBeiYing的博客 1万+

c++中protected和private区别

protected比private可被访问范围更大,比public更小

m0_46104251的博客 3447

python 类的 public protected private 属性

本文整理自《Effective Python 编写高质量 Python 代码的 59 个有效方法》第 27 条:多用 public 属性,少用 private 属性 三种属性 python 类的成员变量中按可见度可划分为 public、protected 以及 private 属性 class MyObject(object): def __init__(self): self.public_field = 5 self._protect_filed = 8

TEDxPY 2386
上一篇: How small can a functional PE executable be?
下一篇: RPGViewer - 反馈页面
vbvan
博客等级 码龄19年 132粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值