Cpp深入:多重继承

Worker.h

#ifndef _WORKER_H_ #define _WORKER_H_ #include <iostream> class Worker { // 基类 public: Worker(); // 这里需要设置成虚函数 virtual ~Worker(); }; class Waiter : virtual public Worker { public: Waiter(); virtual ~Waiter(); void Show(); }; class Singer : virtual public Worker { public: Singer(); virtual ~Singer(); void Show(); }; class SingerWaiter : public Waiter, public Singer { public: SingerWaiter(); ~SingerWaiter(); void Show(); }; #endif

Worker.cpp

#include <iostream> #include "Worker.h" using std::cout; using std::endl; ///////////////////////////////////worker/////////////////////////////////////// Worker::Worker() { cout << "in worker class : constructor" << endl; } Worker::~Worker() { cout << "in worker class : destructor" << endl; } /////////////////////////////////////waiter///////////////////////////////////// Waiter::Waiter() { cout << "in waiter class : constructor" << endl; } Waiter::~Waiter() { cout << "in waiter class : destructor" << endl; } void Waiter::Show() { cout << "in waiter class : show" << endl; } ////////////////////////////////////////singer////////////////////////////////// Singer::Singer() { cout << "in singer class : constructor" << endl; } Singer::~Singer() { cout << "in singer class : destructor" << endl; } void Singer::Show() { cout << "in singer class : show" << endl; } ///////////////////////////////////singer worker/////////////////////////////////////// SingerWaiter::SingerWaiter() { cout << "in singer waiter class : constructor" << endl; } SingerWaiter::~SingerWaiter() { cout << "in singer waiter class : destructor" << endl; } void SingerWaiter::Show() { // 调用singer的show Singer::Show(); // 调用waiter的show Waiter::Show(); cout << "in singer waiter class : show" << endl; }

main.cpp

// 多重继承 #include <iostream> #include "Worker.h" using namespace std; int main() { SingerWaiter sw; sw.Show(); return 0; }

C++多重继承深度解析:从菱形继承到现代设计模式实战 多重继承是面向对象编程中的一种重要机制,它允许一个类同时从多个基类继承属性和行为。其核心原理在于扩展类的功能组合能力,使派生类能够集成多个父类的特性。这一机制的技术价值在于能够更灵活地建模复杂系统,特别是在需要实现多种不相关接口或复用多个独立功能模块的场景中。然而,多重继承也带来了名字冲突、菱形继承等经典问题,需要通过作用域解析、虚继承等技术手段来解决。在实际工程应用中,多重继承常用于实现多接口继承和混入模式,前者通过纯抽象类定义清晰契约,后者则用于注入可复用的小型功能。随着现代C++的发展,开发者更倾向于 阅读详情

相关推荐

C++继承进阶:虚函数表、多重继承与设计模式实战解析

在面向对象编程中,继承是实现代码复用和多态性的核心机制。其原理基于类层次结构的内存布局,通过虚函数表实现动态绑定,使程序能够在运行时根据对象实际类型调用相应方法。这一机制的技术价值在于提升代码的灵活性和可扩展性,是构建复杂软件系统的基石。在实际应用场景中,继承广泛用于图形界面框架、游戏引擎和业务系统建模,例如通过抽象基类定义统一接口,由具体派生类实现特定行为。然而,多重继承可能引发菱形继承问题,而虚继承通过共享基类实例来解决数据冗余。本文深入探讨了C++继承中的虚函数表机制、多重继承的陷阱以及模板方法等设计

weixin_30431445的博客 301

C++多重继承:如何在继承链中解决命名冲突问题?

在f1()函数中,我们使用A::f()的方式来调用类A中的f()函数。在f2()函数中,我们使用C::f()的方式来调用类C中的f()函数。重载函数名可以让派生类使用不同的函数名进行函数的重载,从而避免了同名成员函数在派生类中被重复定义的问题。在多重继承中,当一个派生类继承了多个基类,并且这些基类中有相同的成员函数或变量时,就可能会出现命名冲突的问题。在上面的代码中,类A是一个虚基类,在类B和类C的继承关系中都使用了虚继承。对于不同的基类中具有相同名称的成员函数,派生类可以使用不同的函数名进行重载。

HackQuestR的博客 352

C++:13---继承(单一继承多重继承、多级继承、菱形继承、虚继承

一、基类与派生类的概念基类(父类):在继承关系中处于上层的类派生类(子类):在继承关系中处于下层的类class A;class B;class C:public A //C为A的子类,...

yolo模型训练找我,AI游戏合作找我 511

C++ 多重继承

C++ 编程语言技术知识积累

xiaogangjava的博客 5530

CPP 多重继承

虚基类就是为了解决这个问题而引入的,当一个类从一个虚基类继承时,无论这个虚基类在派生类的继承图中出现了多少次,它都只会被继承一次。因为AmphibiousVehicle类同时从Car和Boat类中继承了Vehicle类,而Car和Boat类又都继承自Vehicle类,这样就会在AmphibiousVehicle类中存在两个Vehicle类的副本。菱形继承问题:如果一个类同时从两个不同的父类中继承一个相同的基类,那么这个基类就会在子类中存在两个副本,从而导致命名冲突和内存浪费。下面我们看一个更复杂的例子。

xiaocaij_icai的博客 404

cpp_10_多重继承_钻石继承_虚继承

多重继承 钻石继承继承

wwwwood的博客 878

c++多重继承

c++多重继承

weixin_42581560的博客 1587

【c++】cpp类的继承

c++类的继承

hutaotaotao的博客 2282

C++中的代码重用:包含 私有继承 以及 多重继承

公有继承是实现代码重用目标的方式之一,同时还有一种方法:使用本身是另外一个类的对象的类成员,简单的说就是一个类的成员包含用另外一个类创建的对象,这种方法被称为包含(containment)、组合(composition)或层次化(layering);还有一种方法是使用私有继承或保护继承,用于实现has-a关系。 一、包含对象成员的类: 1、valarray类 valarry由头文件valarray支持,是一个定义的模板类,用于处理数值,或具有类似性质的类,支持:max()、m...

Ho_mu_ra的博客 1013

C++ :多重继承

在现实生活中,一些新事物往往会拥有两个或者两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。(派生类有两个或两个以上的直接基类)当一个派生类要使用多重继承的时候,必须在派生类名和冒号之后列出所有基类的类名,并用逗好分隔。存在多继承的类层次图是一个图(graph)。只有单继承的类层次图是一个树(tree)。

Taopper的博客 2397

C++:多重继承

MI描述的是有多个直接基类的类。与单继承一样,公有MI表示的也是is-a关系。例如,Worker派生出Singer和Waiter,再从Singer和Waiter派生出SingingWaiter。但多重继承会带来许多问题,最主要的两个便是就上述两个问题,下面根据举例Worker继承给出相关解决方法。

2401_86107325的博客 1008

探索C++继承:从单继承多重继承

本文详细探讨了C++编程中的继承概念,从单继承深入到多重继承的实现和应用场景。通过分析具体的类定义和主函数,揭示了如何通过继承建立类的层次结构,以及如何在类之间共享数据和行为。文章还讨论了继承在真实世界中的意义,并通过示例程序展示了如何在程序中实现继承

weixin_42518874的博客 317

[C++] C++多重继承:深入解析复杂继承关系

本文深入解析C++多重继承的核心概念和实际应用。主要内容包括:多重继承的基本语法和内存布局,典型问题如名字冲突和菱形继承问题,解决方案虚继承的实现原理,以及构造函数调用顺序的特殊规则。文章还提供了多重继承的最佳实践建议,如优先使用组合、使用接口类等,并列举了典型应用场景。通过代码示例展示了多重继承的常见问题及解决方案,帮助开发者理解这一复杂特性。

极客不孤独的博客 1040

C++ 继承(2): 多重继承, 多继承, 虚继承(virtual)

C++远征之继承篇 视频教程 笔记 方便自己查阅和复习,温故而知新。 接着C++ 继承(1): 继承方式(public, protected, private), 继承中的特殊关系(隐藏 , is-a) 继续做笔记 目录 4 多继承多重继承 4.1 多重继承 4.2 多继承 代码示例 5 虚继承 代码示例 参考资料 4 多继承多重继承 4.1...

TechArtisan6的博客 5104

C++:多继承多重继承

5-1 多继承多重继承(一) 多重继承: 多继承: 公有继承下: 上图,如果不写public继承,则系统默认为private继承; 5-2 多重继承代码演示

qq_42745340的博客 329

C++:多重继承带来的问题及解决方法

使用多继承经常会出现二义性问题,必须十分小心。上面的例子是简单的,如果继承的层次再多一些,关系更复杂一些,程序员就很容易陷人迷魂阵,程序的编写、调试和维护工作都会变得更加困难

weixin_62946182的博客 3573
上一篇: Cpp深入:就要在main函数之前执行
下一篇: Cpp深入:异常体系结构
iteye_18591
博客等级 码龄8年 9粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值