private继承

Item39:明智而审慎地使用private继承 private继承是一种“有限且危险”的工具,其核心价值在于:在必须访问基类protected成员或重写虚函数时,提供比复合更直接的实现复用方式。但它的耦合性高于复合,语义模糊,应作为“最后的选择”。能用复合解决的问题,就不要用private继承。仅当复合无法满足需求(访问protected成员或重写虚函数)时,才谨慎使用private继承,并通过清晰的注释和测试降低维护风险。 阅读详情

实例:

#include <iostream>
using namespace std;
class parent{
public:
	void print(void)
	{
		//cout << "a=:" << a << "    b=:" << b <<"    c=:"<< d << endl;
	}
	int a;
private:
	int b;
protected:
	int d;
};
#if 0
class child1 :public parent
{
public:
	void SetVar(int _a, int _b, int _c)
	{
		a = _a;
		//b = _b;//不可以访问,因为是基类的私有属性
		d = _c;//可以在子类(派生类)中使用,但也仅限于在类中,不可以再类外使用
	}
private:
protected:
};
#endif
class child2: private parent
{
	void SetVar(int _a, int _b, int _c)
	{
		a = _a;
		//b = _b;//不可以访问,因为是基类的私有属性
		d = _c;//可以在子类(派生类)中使用,但也仅限于在类中,不可以再类外使用
	}
public:
private:
protected:

};

int main()
{
	child2 oop;
	/*这三种方式都不可以使用,因为在子类中的集成方式为private,所以,基类所有成员属性在子类中都变成private,所以在外部不可以访问了*/
	//oop.a = 100;
	//oop.b = 1000;
	//oop.d=10000  
	system("pause");
	return 0;
}



C++(03):使用private继承 类Wing提供了虚函数fly,但是类Plane需要重写fly函数,而Plane不是Wing,所以不能采用public继承,他基于Wing实现,所以采用private继承。在通常的程序设计中很少使用private继承,因为private继承其实相当于“根据某物实现”,而这种情况应该通过类成员变量的方式来实现。也就是通过在类的内部派生一个私有类,然后在通过成员变量的方式实现。... 阅读详情

相关推荐

乐鑫ESP32-C6产测全流程:RAM固件测试与阈值校准实战指南

Wi-Fi模组量产测试是保障IoT设备射频性能与硬件可靠性的关键环节,其核心在于基于RAM的无损固件加载、可配置的阈值判定机制及多工位协同控制。该流程依托串口协议与结构化配置(如JSON阈值文件、.bin测试固件),实现RF性能(fb_rssi、tx_power)、GPIO导通性、Flash ID识别与固件版本校验等原子化测试项的自动化执行。技术价值体现在避免Flash擦写风险、支持动态温补与在线学习校准,并无缝对接MES系统实现质量数据闭环。典型应用场景包括ESP32-C6/C3/S2等乐鑫全系Wi-Fi

weixin_35756690的博客 312

C++继承之private继承

通过继承机制,可以利用已有的对象类型来定义新对象类型。所定义的新对象类型不仅仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类,又称为父类。由已存在的类派生出的新类称为派生类,又称为子类。 private继承 派生类中父类public成员变成private成员。

flysnow010的博客 2064

阿里云Ubuntu部署Steam饥荒联机版服务器:从零到多人联机的完整指南

本文详细介绍了在阿里云Ubuntu系统上部署Steam饥荒联机版服务器的完整流程,包括环境准备、SteamCMD安装、服务端配置、Mod管理及后台运行技巧。通过2核4GB的ECS实例配置和端口设置,实现5人流畅联机体验,适合游戏爱好者快速搭建专属服务器。

weixin_29229261的博客 1027

C++ 编程规范-private继承

Private继承基础知识 延伸: 简单地说下C++类的3种继承方式,分别是public继承,protected继承,private继承。 最常用的还是public继承。class默认的是private继承,它的member如果没写权限也是默认 private。struct则相反,默认的是public继承。结合下面的图示和代码,对C++的继承就有了比较清晰的认识了。 1. 父类引用子类 & 父类指针绑定子类 public继承的时候,以下可行。也就是只有is-a关系的时候,才能采用父类引用绑定子类以

劲草浅躬行 3734

2026年AI技能进阶指南:从提示词工程到智能体开发实战

提示词工程作为AI时代的基础沟通技能,其核心原理是通过系统化的交互方法论实现与大模型的高效对话。这项技术通过明确性、具体性和可操作性的设计原则,显著提升了AI生成内容的质量和实用性。在工程实践层面,提示词工程已经发展出角色扮演、步骤分解等成熟模式,广泛应用于代码生成、技术方案设计等场景。随着AI智能体开发的兴起,提示词工程进一步演化为定义智能体身份认知和行为规范的系统接口设计,成为构建自主AI系统的关键技术基础。掌握从基础提示词到智能体开发的完整技能栈,能够帮助开发者在AI技术浪潮中保持核心竞争力。

weixin_33139275的博客 333

当NetApp 7-mode遇到单控制器故障:HA模式手动修复全记录

本文详细记录了NetApp 7-mode存储系统在单控制器故障时的应急修复过程,包括HA配置重建、磁盘初始化和业务恢复等关键步骤。通过实战案例解析如何解决`VIA Interconnect is down`等典型问题,为企业级存储系统的高可用保障提供实用指南。

yolo5detector的博客 247

关于private继承

在C++的类中有许多种继承方式,而我们在软件设计和编写代码时用得最多的就是public继承,我们很少接触到private继承。但是我们在设计时真的有思考过什么时候应该用public继承,什么时候不该使用public继承,什么时候应该想想那些经常被我们遗忘的知识,让我们从它们被遗忘的角落里重拾它的光芒。例如private继承。 As we all know,public继承是塑模出一种is

算法改变人生 3333

FFTW多核优化避坑指南:从交叉编译到ELF2板载OpenMP部署全流程

本文详细介绍了在ELF2开发板(RK3588平台)上为FFTW库配置OpenMP多核并行的完整流程与避坑指南。内容涵盖从交叉编译、库依赖处理到板载部署的实战步骤,并深入分析了RK3588的big.LITTLE架构对线程调优的影响,帮助开发者在嵌入式环境中高效利用多核性能。

2a4s6d8f0g的博客 273

java继承关系中,父类private修饰的内容真的不能被继承吗?NO

前情引入 关于java的继承,初学的时候,一直认为父类中private修饰的东西时无法被子类继承。后来随着学习的深入,见得多了一些,看到一些文章博客的另一种观点:其实父类中的东西,除了构造方法之外,其它的全都是可以被继承的,包括私有的。但是由于private修饰的东西,只能在本类中可见。所以即便子类继承了,也是不可见的。 我一开始听着很玄乎,什么?我继承了我父亲的遗产,但是我自己却无法使用?这是什么逻辑。反正继承了private修饰的内容,也是看不见的,那和没继承也没啥区别,而且也没法验证子类是不是真的继承

ql_7256的博客 2万+

手把手教你模拟登录豆瓣并爬取个人书影音数据:从Cookie解析到反爬攻防实战

在开始写代码之前,先明确我们需要的工具。:建议用3.10以上版本,方便使用一些新特性(如match语句)httpx:比requests更现代,支持HTTP/2,异步性能强,连接池复用好:解析HTML,语法简单,容错性强selenium:仅用于处理登录时的滑块验证(模拟真人)pandas:最终数据清洗和导出Excel/CSVretrying:自动重试机制,应对临时封禁:随机UA,降低特征lxml:作为BeautifulSoup的解析器,速度快为什么不只用requests?

2201_76125261的博客 578

SAP 角色继承、派生

角色继承、派生 继承:是指两个角色Role形成母子关系。子角色的所有菜单、授权都源于母角色,并与母角色保持一致。母角色与子角色是1对多的关系。 继承关系:新建子角色继承母角色中的事务(后续通过复制,将母角色授权数据复制至子角色) 派生概念:将母角色中的授权数据派生至子角色中。 业务场景:方便批量修改子角色权限。若有继承关系,只需要修改母角色,然后通过母角色派生功能,从而批量修改子角色授权数...

willieyuan的博客 1万+

你所不知的private继承

你所不知的private继承  在C++的类中有许多种继承方式,而我们在软件设计和编写代码时用得最多的就是public继承,我们很少接触到private继承。但是我们在设计时真的有思考过什么时候应该用public继承,什么时候不该使用public继承,什么时候应该想想那些经常被我们遗忘的知识,让我们从它们被遗忘的角落里重拾它的光芒。例如private继承。 As we all know

ljianhui的专栏 5317

优快云 2

2

qq_62260432的博客 5237

c++ public继承 和 private继承

一  : c++ public继承 1  显示效果: 2 代码 #include "windows.h" #include "iostream" using namespace std; class A { protected: void test() { cout << "A类test函数调用" << endl; } public : void run() { cou

nocomment_84的博客 454

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

private 继承 真的没用吗??

private继承,在看到effective C++之前,我发现在我之前的代码里面,没有用到这个机制,但是认真回想起还是有一些影子。 大多数人认为private继承是没有用的,其实不然,在某些情况下,它也会带给你一些惊喜。 好,言归正传,之前已经数次提到过 public继承表示的是  “is   a ”的关系,也就是说每一个derived对象D同时也是base对象,任何在 base对

绝知此事要躬行 2126

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

private继承与public继承

1 private, public, protected 访问标号的访问范围 private: 能够访问:1.该类中的函数;2.友元函数。 不能访问:1.public继承的子类和private继承子类;2.该类的对象。 protected: 能够访问:1.该类中的函数;2.public继承的子类和private继承子类;3.友元函数。 不能访问:1.该类的对象。 public:

我有一个梦想 1166

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++中public、protected及private继承

转载这里 在设计基类时,对于某些成员变量基类设计者A也不知道其他人会怎么使用,假如A一开始将成员变量a定义为private,当其他人过来继承时需要一个a++的操作,那么他就不得不去找A让他改基类的定义,不然在继承类中无法直接操作基类的私有成员。过了一会儿又有人需要一个a--操作,那么A又要改基类定义添加一个a--的public成员函数,当然后面还有各种需求。。所以A很无奈,于是就出现了protect,对于继承者而言,你们随便操作不用再来麻烦我。这样即保证了数据的私有性(不能被对象获取),同时基类设计者..

mystyle_的博客 1479

java private的继承

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/f2PFnNJava Private 的继承 在Java编程语言中,继承是面向对象编程的重要特性之一。它允许一个类(子类)继承另一个类(父类)的属性和方法。然而,在Java中,private字段和方法...

weixin_40462805的博客 228

java private变量 继承_private变量可以被继承?

该楼层疑似违规已被系统折叠隐藏此楼查看此楼请看以下程序,定义了圆形类Circle,其中的变量用private修饰,然后圆柱类Cylinder继承Circle类,圆柱类中并没有声明半径等变量,但是最后正常输出结果了(请注意我创建实例的时候是以圆柱类创建的),如果private修饰的半径不能被继承,为什么能输出正确结果???????莫非private变量可继承?package cylinder;cl...

weixin_33026363的博客 739

C++中private继承

我之前理解和学的不是很明白,现在弄明白了一点记下来,以后提醒自己。 之前觉得子类private继承父类时,继承的所有父类的成员变量和成员函数都是访问权限都是private的, class Parent { private:     int a; protected:     int b; public:     int c;     Parent()     {

u012488001的专栏 643

C++基类中的private成员被继承问题

本文不对基类中的public成员被继承(无论是哪种类型的继承)做过多赘述,只针对于基类的private成员被继承进行一些讨论。

m0_60157132的博客 1024

详解C++中的三种 继承(public, protected, private)

@TOCC++三种继承方式: 先看一张继承关系表 三种继承方式: 1.首先说明一点:类实例(即类对象)不能直接访问类的 private成员和protected成员,但是能直接访问类的public成员。 2.另外无论哪种继承方式,子类都不能直接访问父类的 private成员;但是能直接访问父类的 protected成员和public成员(注意:是子类,而不是类实例),并且能通过父类的protected成员函数和public成员函数间接访问父类的private成员;这句话强调了类与类之间通过继承方式的访问规则

xrinosvip的博客 1万+

C++的三种继承方式:public,protected,private

C++访问权限控制符 : public 公有成员 基类、派生类、友元、外部都可以访问 protected 保护成员 基类、派生类、友元可以访问 private 私有成员 基类、友元可以访问 同样的C++继承方式有public,protected,private三种: 今天就来给大家简单介绍一下C++的三种继承方式。 1、public 方式继承 基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员可见,基类的公有成员和保护成员...

Hsuesh的博客 2921

effective c++:private继承

effective c++:private继承 如果class间使用private继承关系,编译器就不会自动的将派生类转换为基类,而且private继承而来的成员都变为private属性。 private继承意味着根据某物实现出,当我们想要避免重复代码,使用现有的代码时,就可以使用private继承。 class Widget: pri...

weixin_30586085的博客 137

private继承的特点和意义以及何时使用

private继承的特点和意义private继承导致的结果 基类中的所有成员都会变成private; 如果是private继承,则==不会自动将派生类类型转换为基类类型(不会自动转换,但是可以手动显式进行转换),不能隐式转换==; private继承的意义==不同于public继承是表示子类与基类之间的’is-a’关系,private并不象征着类之间的’is-a’关系。==private继承意味着“

performance 7068

条款39、明智而小心的使用private继承

首先如果Widget是一个基类,后面还有人要继承,那么子类可以重新定义onTick()函数,但是这个是你不想的,所以方法二可以解决这个困扰,第二,Widget的编译依存降低,我们把WidgetTimer这个类移到外面某个文件,把成员变量timer改成指针,那么文件只要申明一个WidgetTimer就可以了,所以不会需要include "Timer.h"了,依赖降到最小。但是我只是需要这些成员去实现我的类D,并不给用户提供接口能直接访问类B的这些成员,这时候就应该用private继承。

feng__shuai的博客 1179
上一篇: public继承
下一篇: protect继承
LiBin1103
博客等级 码龄9年 38粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值