在VS2013编程,调试
问题 : 菱形继承会引来,二义性
1.源代码
#include
using namespace std;
class Base
{
public:
virtual void FunTest()
{
cout
}
virtual void FunTest1()
{
cout
}
};
class C1 :virt...
分类:
其他好文 时间:
2016-04-14 01:31:50
阅读次数:
296
在继承中经常会遇到这种情况:有一个超类A,子类B1,B2继承了A,而类D又继承了父类B1,B2。在这种情况下如果按照我们以前的正常的菱形继承的话会有一个问题是子类C会继承两次超类A中的成员,当在C中想访问继承来自B1,B2中A的元素会出现两个问题:问题一、数据的冗余问题二、访..
分类:
编程语言 时间:
2016-04-13 11:33:40
阅读次数:
199
在我个人学习继承的过程中,在网上查阅了许多资料,这些资料中有关菱形继承的知识都是加了虚函数的,也就是涉及了多态的问题,而我在那个时候并没有学习到多态这一块,所以看很多资料都是云里雾里的,那么这篇文章我想以我自己学习过程中的经验,由简到较难的先分析以下菱形继承,让初学者先对这个问题有一点概念,在后面会由浅入深的继续剖析。
本篇文章不会涉及到多态也就是虚函数的菱形继承,在后面的文章更新中,我...
分类:
编程语言 时间:
2016-04-12 17:32:38
阅读次数:
210
菱形继承:Assitant的菱形继承对象模型Assitant中有两份Person成员,存在二义性和数据冗余。所以我们引出了虚拟继承。virtual虚继.不会在子类中创建父类成员,但是子类中可以引用,就像指针一样。主要用在菱形继承,也叫钻石继承。虚拟继承对象模型classStudent:vitrualpublicP..
分类:
其他好文 时间:
2016-04-07 18:40:26
阅读次数:
174
C++的虚继承主要解决了数据冗余与二义性的问题,起实现方法是什么呢,我们先看一段代码。#include<iostream>
usingnamespacestd;
classA
{
public:
int_num;
};
classB1:publicA
{
};
classB2:publicA
{
};
classC:publicB1,publicB2
{
};
intmain()
{
Cc;
cout<..
分类:
其他好文 时间:
2016-03-12 06:56:04
阅读次数:
244
问题:由于将下图定义为多继承类型时,子类会发生二义性与数据冗余,而用菱形继承时会解决这些问题,菱形继承发生了些什么?又是怎么实现的?本次试着说明菱形继承的机理(实现方法)按照上图建立多继承,编写代码:classBase
{
public:
virtualvoidfunc1()
{
cout<<"Bas..
分类:
其他好文 时间:
2016-03-10 14:53:23
阅读次数:
147
1. 多重继承 在多继承中,如果派生类的多个基类出现重名函数,为了避免出现歧义,则可以在派生类中重写这些重名函数。 2. 菱形继承问题,成员冗余(成员变量的冗余,无问题。成员函数的冗余,可能会出现问题)。函数调用出现歧义。 使用虚继承解决菱形继承问题。 3. 模板 函数模板:有类型参数的函数。 如何
分类:
编程语言 时间:
2016-03-04 14:30:58
阅读次数:
212
#pragmaonce//头文件
#include<iostream>
#include<string>
usingnamespacestd;
//
//1.实现以下几个类的成员函数
//2.实现一个虚函数的覆盖及调用
//3.处理菱形继承问题。
//
//植物
classBotany
{
public:
Botany(conststring&name);
virtual~Botany();..
分类:
编程语言 时间:
2015-12-11 18:59:08
阅读次数:
171
#include<iostream>#include<string>usingnamespacestd;1.实现以下几个类的成员函数2.实现一个虚函数的覆盖及调用3.处理菱形继承问题。植物classBotany{public: //(conststring&name)//constchar*name Botany(constchar*name="") :_name(name)//构造函数 { /..
分类:
其他好文 时间:
2015-09-14 00:37:33
阅读次数:
153
在多继承时很容易产生命名冲突问题,如果我们很小心地将所有类中的成员变量及成员函数都命名为不同的名字时,命名冲突依然有可能发生,比如非常经典的菱形继承层次。类A派生出类B和类C,类D继承自类B和类C,这个时候类A中的成员变量和成员函数继承到类D中变成了两份,一份来自A派生B然后派生D这一路,另一份来自...
分类:
编程语言 时间:
2015-07-16 15:46:26
阅读次数:
152