c++ vitual继承
为了解决多继承下的二义性而设计的vitrul继承
class Base
{
public:
Base(void);
~Base(void);
}; Base::Base(void)
{
printf("Base::Base():%p\n",this);
} class ChildFirst :
/*vitual*/ public Base
{
public:
ChildFirst(void);
~ChildFirst(void);
}; ChildFirst::ChildFirst(void)
{
printf("ChildFirst::ChildFirst()\n");
} class ChildSencond :
/* vitrual */public Base
{
public:
ChildSencond(void);
~ChildSencond(void);
}; ChildSencond::ChildSencond(void)
{
printf("ChildSencond::ChildSencond()\n");
} class GrandChild :public ChildFirst, ChildSencond
{
public:
GrandChild(void);
~GrandChild(void);
}; GrandChild::GrandChild(void)
{
printf("GrandChild::GrandChild()\n");
} int _tmain(int argc, _TCHAR* argv[])
{
GrandChild grandChild;
return ;
}
这样的话,Base::()Base()会被调用两次而且两次地址不同。
输出
Base::Base():0x0015ff0f
ChildFirst::ChildFirst()
Base::Base():0x0015ff10
ChildSecond::ChildSecond()
GrandChild::GrandChild()
.为解决上述问题,请把注释了virtual打开,注意写法,vitual是直接继承的那里写的。
打开后的输出为:
Base::Base():0x0015000f
ChildFirst::ChildFirst()
ChildSecond::ChildSecond()
GrandChild::GrandChild()
c++ vitual继承的更多相关文章
- 继承多态绕点 C#篇
最近在看博客的时候看到一块很绕的地方,有点类似于以前学习C语言是的i++,++i组合到一起使用的情况,很坑b的,绝对会比i++,++i这种情况更有用,虽然实际代码里面确实很少出现. 面对象像三大特点不 ...
- c++学习笔记之继承篇
title: c++学习笔记之继承篇 date: 2017-03-26 16:36:33 tags: [c++,继承,public,virtual,private,protected] categor ...
- 利用vitual构造类的动态多态性
虚函数: 在程序运行过程中调用函数名相同的函数而实现不同功能的函数 利用虚函数这一特性,我们可以在公有继承的基类(父类)中定义虚函数,而在它们的派生类(子类)中通过基类指针来实现派生类中同名函数的调用 ...
- 解读经典《C#高级编程》第七版 Page94-100.继承.Chapter4
前言 今天,我们开始进入第四章的解读.本章讲的是继承.要做稍微复杂一些的开发,便不可避免的会使用到继承.本篇文章我们主要解读"实现继承". 另外,从本文开始,我开始使用Markdo ...
- CPP_封装_继承_多态
类的三方法:封装,继承,多态.封装:使用一整套方法去创建一个新的类型,这叫类的封装.继承:从一个现有的类型基础上,稍作改动,得到一个新的类型的方法,叫类的继承.多态:当有几个不同的子类对象时,对象调用 ...
- 多重继承,虚继承,MI继承中虚继承中构造函数的调用情况
先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include < ...
- C/C++程序基础 (七)继承和多态
多态 编译时多态:重载 运行时多态:虚函数.根据运行时的类别获取正确的虚指针,从而定位正确的虚函数. 虚函数 虚函数指针:指向虚函数表.多重继承则含有多个基类的虚函数指针. 虚函数表:函数指针集合.普 ...
- virtual member functions(单一继承情况)
virtual member functions的实现(就单一继承而言): 1.实现:首先会给有多态的class object身上增加两个members:一个字符串或数字便是class的类型,一个是指 ...
- C++中的继承与虚函数各种概念
虚继承与一般继承 虚继承和一般的继承不同,一般的继承,在目前大多数的C++编译器实现的对象模型中,派生类对象会直接包含基类对象的字段.而虚继承的情况,派生类对象不会直接包含基类对象的字段,而是通过一个 ...
随机推荐
- Solr单机版安装
感谢 shliuzw 的分享,原文地址http://blog.csdn.net/liuzhenwen/article/details/4060922 感谢 upxiaofeng 的分享,原文地址 ht ...
- bzoj 5016 一个简单的询问
THUWC 考了莫队(这个应该可以说吧) 然而不会莫队,签到失败,所以找到了一道长得差不多的题写一写 为什么这么长时间都没有发现这道题(半恼 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问 ...
- [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure、function、Sequence
本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...
- LeetCode Longest Harmonious Subsequence
原题链接在这里:https://leetcode.com/problems/longest-harmonious-subsequence/description/ 题目: We define a ha ...
- webpack 配置简单说几句 ?
前言 这几天在准备一个单页面应用, 准备试试webpack神器,在准备webpack下的知识点,顺便记录下一些使用的心得. webpack 的配置说明 在近来的前端开发中,业务逻辑复杂化,层次多样化, ...
- h5 离线缓存小demo
传统的web应用是在线应用,这其实也是web的特色,对于PC时代问题并不大,但到了移动互联网时代,设备终端位置不再固定,依赖无线信号,网络的可靠性变得更低.比如:在火车上,穿山越岭进隧道,便无法访问w ...
- javascript switch continue break 执行语句
1:switch 关键字段:switch(n).case.break.default switch(n) :n是一个表达式 或者是一变量,用来与其下的各种case进行匹配,比如:此时的day输出的是 ...
- 利用PowerDesigner设计数据库
PowerDesigner非常强大, 可以利用它完成数据库的设计. 1.下载地址:http://pan.baidu.com/s/1DsLrg 2.表设计: 建立概念数据模型(Conceptual Da ...
- CodeForces 620E:New Year Tree(dfs序+线段树)
E. New Year Treetime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputout ...
- python with open as f 写韩文中文乱码
python3和python2的写法不一样具体如下: python3: with open(r'd:\ssss.txt','w',encoding='utf-8') as f: f.write(u'中 ...