- 浏览: 373276 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
三 虚基类
如图所示,如果类B和类C均由类A派生而成,而类D又是由类B和类C共同派生而成,则在派生类D中就出现了基类A的两个拷贝,从而产生了冲突。为了解决此问题,VC++中引入了虚基类的概念,即在由类A派生类B和类C时,如果将基类A说明为虚基类,则类A在此后的派生类中只生成一个拷贝。例如:
#include<iostream.h> class A{ public: int a,b; A(int x){a=x;} }; class B:virtual public A{ //A行 public: int b; B(int x,int y):A(y){b=x;} }; class C:public virtual A{ //B行 public: int c; C(int x,int y):A(y){c=x;} }; class D:public B,public C{ public: int d; D(int x,int y,int z,int q):B(y,z),C(z,q),A(q) //C行 {d=x;} }; void main() { D d1(1,2,3,4); cout<<d1.a<<'\t'<<d1.b<<'\t'<<d1.c<<'\t'<<d1.d<<'\n';//A行 }
虚基类的说明使用关键字virtual,其基本格式如下:
class <派生类名>:virtual <派生特性> <基类名> {…}
其中关键字virtual可以放在“派生特性”前(如上面的A行),也可以放在“派生特性”后(如上面的B行)。
由于类D的构造函数分别调用了类B和类C的构造函数,而类B和类C的构造函数又都分别调用了类A的构造函数,这样,在类D生成对象时就无法确定从类A中继承来的成员的初始值。VC++中规定,在这种情况下,在执行类B和类C的构造函数时均不调用类A的构造函数,而是由类D的构造函数来直接调用类A的构造函数。所以,如果类A没有缺省的构造函数,在类D的构造函数中必须明确类A的构造函数的调用。如果上面程序的C行中去掉最后的类A的构造函数调用A(q),即将C行改为如下形式:
D(int x,int y,int z,int q):B(y,z),C(z,q)
则系统编译时将报错。上面的程序运行后输出:
4 3 2 1
从程序的输出可以看出,类D中从类A继承来的成员a的初始化是由C行中的A(q)完成的。
发表评论
-
FreeRTOS
2022-03-05 16:31 253Ref https://blog.csdn.net/weix ... -
串口通讯相关
2018-11-02 13:44 417https://bbs.csdn.net/wap/topics ... -
[转]C++验证IP是否可以PING通
2018-10-30 17:54 1346https://www.cnblogs.com/guoyz13 ... -
C++/MFC 換皮膚
2018-10-20 11:05 481https://blog.csdn.net/u01123991 ... -
WinCE 截屏 - C++ 代碼
2018-08-31 09:45 580// this function create a bmp ... -
Android NDK搭建環境
2017-11-27 13:25 593https://www.cnblogs.com/ut2016- ... -
8583协议相关
2017-10-17 13:38 5828583相关资料,整理中... -
Java高级应用之JNI
2017-06-19 09:00 609参考link http://www.cnblogs.com/l ... -
C++实现ping功能
2017-04-18 11:21 2176基础知识 ping的过程是向目的IP发送一个type=8的I ... -
OpenSSL 编译环境搭建
2017-03-27 15:01 9161 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1596OpenSSL命令---rsautl http://blog. ... -
[Platform Builder] 设置SVM OS build Env
2016-11-10 11:39 01 copy one OSDesign Project to ... -
[Windows] System Error Codes(GetLastError )0-----5999
2016-10-26 13:28 1886ERROR_SUCCESS 0 (0x0) T ... -
开源Windows驱动程序框架
2016-09-17 21:35 878转自 http://code.csdn.net/news/28 ... -
c/c++代码中执行cmd命令
2016-09-14 14:50 1926转自 http://blog.csdn.net/slixinx ... -
C#使用C++标准DLL实例(包含callback)
2016-09-11 19:44 1095C++编写标准Win32DLL如下 头文件 /***** ... -
C#调用C++的DLL搜集整理的所有数据类型转换方式
2016-09-09 16:07 974转自 http://www.cnblogs.com/zeroo ... -
WinCE CPU使用率计算 测试工具
2016-09-08 16:14 1005转自 http://blog.csdn.net/jan ... -
switch在C++与C#中的一些差异
2016-09-08 15:19 819参考链接 http://blog.csdn.net/weiwe ... -
C++ 鼠标模拟程序
2016-09-04 12:09 1623转自 http://blog.csdn.net/weixinh ...
相关推荐
C++是一种广泛使用的面向对象的编程语言,由Bjarne Stroustrup于1983年在C语言的基础上发展而来。C++不仅保留了C语言的效率和灵活性,还引入了面向对象编程的概念,如类、对象、继承、封装和多态等。这些概念是理解...
这份"C++基础知识讲义v2"是一份专为初学者和初级C++讲师设计的学习资料,涵盖了C++的基础概念和关键特性。 1. **编程入门**(c++基礎知識1編程入門.pps):这部分通常会介绍C++的历史、基本语法,如变量声明、数据...
本教程将深入探讨C++的基础知识,帮助初学者建立起坚实的编程基础。 C++源于C语言,但又超越了C,它引入了类、模板、命名空间、异常处理等概念,使得面向对象编程成为可能。在学习C++基础时,首先要理解的是它的...
本资料包是专为C++初学者和进阶者设计的一系列练习,旨在帮助你从基础到高级,全面理解和掌握C++的所有关键知识点。每个知识点都以独立的.doc文档形式呈现,便于学习和查阅。 一、运算符与表达式 C++中的运算符是...
C++的基础知识包括以下几个核心部分: 1. **C++概述**: - **程序设计方法**:结构化程序设计和面向对象程序设计。结构化设计强调自顶向下、逐步求精,以函数为基本单元;面向对象设计则强调对象和消息传递,更...
C++基础知识汇总 C++是一种强大的、面向对象的编程语言,具有丰富的库支持和高度的灵活性。本汇总主要涵盖C++的基础概念、内存管理、面向对象特性、语法特性以及一些常见问题。 1. C++中的内存管理: - `new` 和 ...
学习C++的基础知识,对于任何想要从事软件开发的人来说都是必要的。它不仅适用于系统级编程,也是游戏开发、嵌入式系统、桌面应用和大规模软件项目的重要选择。掌握C++的基础,不仅可以帮助理解其他高级编程语言,也...
### C++多态性与虚函数知识点解析 #### 一、多态性的概念 多态性是面向对象编程的一个核心特性,它允许我们通过基类的接口来操作派生类的对象。这种特性使得代码更加灵活且易于扩展。在C++中,多态性主要通过虚函数...
以下是C++基础知识的一些关键点: 1. **面向对象特性**:C++的面向对象特性包括封装、继承和多态。封装允许将数据和操作这些数据的方法组合在类中,保护数据不受外部直接访问。继承允许创建一个类(子类)作为现有...
C++是一种广泛使用的编程语言,尤其...《c++基础知识.chm》文件很可能包含了更详细的讲解,包括实例和练习,对深入学习大有裨益。对于初学者来说,坚持学习和实践,逐步积累经验,才能真正掌握C++这门强大的编程语言。
作为C++的基础知识,我们首先要理解它的历史背景。C++是由Bjarne Stroustrup在1979年基于C语言的基础上发展起来的,旨在提供一种面向对象的编程能力,同时保留C语言的效率。 1. **基础语法**:C++的基础语法与C语言...
在“c++基础知识及面向对象课件”中,我们可以深入学习C++的核心概念,包括类与对象、继承与派生、多态性等,这些都是C++面向对象编程的基础。 首先,第4章“类与对象”介绍了C++的核心概念。类是C++中的蓝图,用于...
本篇将深入探讨C++的基础知识以及一些典型的编程实例,帮助初学者快速上手。 在C++语言基础中,数据类型是编程的基石。其中,引用类型(References)是一种特殊的变量,它在声明时必须初始化,并且一旦赋值后就不可...
在这个“C++程序设计 继承与派生实验(二)”中,我们将深入探讨这三个关键知识点:类的派生与继承的概念、继承方式对成员访问权限的影响,以及虚基类的用法。 首先,让我们理解类的继承与派生。继承是面向对象设计...
C++ 是一种强大的、高效的编程语言,广泛应用于系统软件、应用程序、游戏开发、嵌入式系统等各个领域。...以上就是C++基础知识的一些核心要点,理解和掌握这些概念是深入学习C++并编写高效、可靠代码的基础。
在C++编程语言中,有一些基础且重要的知识点,这些知识点在学习C++的过程中至关重要。以下是对给定文件中提到的一些关键点的详细解释: 1. **逗号运算符**: - 逗号运算符 `(,)` 具有低优先级,意味着它会在赋值...
这本书深入浅出地介绍了C++的各种概念和技术,帮助读者建立起扎实的C++基础。 在学习C++时,以下几个核心知识点是非常关键的: 1. **基本语法与数据类型**:C++的基础包括变量、常量、运算符、控制结构(如if语句...