#include<iostream>
#include <afxcom_.h>
using namespace std;
#define IAID 1
#define IBID 2
struct IA;
struct IB;
struct IQ
{
virtual bool QueryInterface(IQ** pIQ, int nInterfaceID) = 0;
};
struct IA : public IQ
{
virtual void funInIA() = 0;
};
struct IB : public IQ
{
virtual void funInIB() = 0;
};
struct C : public IA, public IB
{
bool QueryInterface(IQ** pIQ, int nInterfaceID)
{
if (nInterfaceID == IAID)
{
*pIQ = /*static_cast<IA*>*/(IA*)(this);
}
else if (nInterfaceID == IBID)
{
*pIQ = /*static_cast<IB*>*/(IB*)(this);
}
else
{
*pIQ = NULL;
return false;
}
return true;
}
virtual void funInIA()
{
cout << "C - funInIA" << endl;
}
virtual void funInIB()
{
cout << "C - funInIB" << endl;
}
};
struct D : public IA, public IB
{
bool QueryInterface(IQ** pIQ, int nInterfaceID)
{
ASSERT(false);
return true;
}
virtual void funInIA()
{
cout << "D - funInIA" << endl;
}
virtual void funInIB()
{
cout << "D - funInIB" << endl;
}
};
IA* CreateInstance()
{
return new C;
//or //return new D;
}
int main()
{
IA* pIA = CreateInstance();
pIA->funInIA();
//可行
//IB* pIB = dynamic_cast<IB*>(pIA);
//pIB->funInIB();
IB* pIB;
IQ* pTemp;
if (pIA->QueryInterface(&pTemp, IBID))
{
pIB = (IB*)pTemp;
pIB->funInIB();
}
delete pIA;
return 0;
}
大家在学java C#的时候一定会看到类似这样的话“一些语言如C++支持所谓的‘多重继承’,即一个类派生...”然后可能大家就会对C++的多重继承保持一种不好的印象,可是大家不要忘了,在C#和java里面是有接口继承的,而
C++在语法上直接支持多重继承
1.接口继承与实现继承的区别《Effective C++》条款三十四:区分接口继承和实现继承中介绍的比较啰嗦,概括地说需要理解三点: (1)纯虚函数只提供接口继承,但可以被实现; (2)虚函数既提供接口继承,也提供...
20180322 C++ 区分接口继承和实现继承public继承概念由两部分组成,函数接口(function interfaces)继承和函数实现(function implementations)继承。作为类的开发人员,我们主要研究类的三种继承情况:1、派生类只...
#include<iostream> using namespace std; class A{ public: int a; }; class B{ public: int a; }; class C:public A,public B{ public: using A::a;//1 指定默认的 [...
“继承基类方法接口的含义” 首先,类方法分为实现与接口。所谓方法接口,是用于描述类内与类外交互的途径,因此,只有能够在类外,通过类对象直接对类方法进行调用,才能称为继承了接口。 公有继承与私有继承 ...
在c++中一个类可以从多个基类中派生(即可以有多个父类),这就是多继承。多继承的方式主要有两种:1. 简单版本 类C会同时拥有类A和类B的特性(属性和方法,也就是两个类的所有成员)。这种方式很简单这里就不多说,...
C++多重继承一直是一个让人搞不太清楚的一个问题,但是有时候为了实现多个接口,多重继承是基本不可避免,当然在Windows下我们有强大的COM来帮我们搞定这个事情,不过如果你想自己实现一套类似于COM的东西出来的时候...
举例:现实生活中,许多事物可能有两个或者两个以上事物的属性,为了描述这种情况,C++引入了多继承。 允许一个类指向多个基类,这样继承的结构叫多重继承。 概念 多重继承:常规情况,一个类只有一个基类,...
在本文中,我们解释由gcc编译器实现多继承和虚继承的对象的布局。虽然在理想的C++程序中不需要知道这些编译器内部细节,但不幸的是多重继承(特别是虚拟继承)的实现方式有各种各样的不太明确的结论(尤其是,关于向...
class A { public: void a();}; class B:public A { public: void a();}; class C:public B { public: void a();}; 请问怎么在main函数中访问A中的a()函数
Multiple Inheritance - C++ 多继承比单继承更复杂,引入了歧义的问题,以及虚继承的必要性...典型的场景是:public继承自一些接口类,private继承自哪些实现相关的类。 歧义 class A{ public: void func(); }; ...
1 由来 客户用陈旧的VC++6.0进行项目开发,有一块...使用C++开发DLL的基本原则是减少暴露和接口简单化,最常用的方式就是使用纯虚类导出接口。另一种就是使用C++实现,但是导出时只导出C函数。处于使用的便利性考虑,
接口继承(interface) 和 实现继承...继承接口和实现, 主要包含三种方式: 1. 只继承接口, 纯虚函数; 2. 继承接口和实现, 允许覆写(override), 虚函数; 3. 继承接口和实现, 不允许覆写(override), 非虚函数;
C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承. 举个例子,交通工具类可以派生出汽车和船连个子类,但拥有汽车和船共同特性水陆两用汽车就必须继承来自汽车类与船类的共同属性。如下图示: ...
接口是常量值和方法定义的集合。接口是一种特殊的抽象类。 java类是单继承的。classB Extends classA ...java接口可以多继承。Interface3 Extends Interface0, Interface1, interface…… 不...
本文参照于狄泰软件学院,唐佐林老师的——《C++深度剖析教程》
当初学C++继承的时候,一开始确实被里面乱七八糟的关系弄的晕得不轻。单继承、多继承、虚继承.....Ծ‸Ծ 当时好像听过一句话:“等你学Java的时候就好了,Java把这些东西都扔了” 罒ω罒//偷笑.jpg 为什么会丢弃...
C++中虚拟继承的概念 为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名...
C++面试题汇总 (一)一,基础题二,算法题 一,基础题 new、delete、malloc、free关系 delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/...
多继承和二义性 二义性的产生:1.重名定义 2. 多路径继承 解决二义性的方法: 不重名 — 利用成员名限定法(Bird与Horse中的fun 与 m_weight不重命) 在派生类中定义一个同名成员;(在FlyHorse中也定义fun ...
继承概念类之间的关系has-A,uses-A 和 is-Ahas-A 包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。uses-A 一个类部分地使用另一个类。...
文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些...Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...
一、秋招 Linux C/C++ offer 情况 ...Linux C/C++ 从零基础到大神的学习路线,自己的真实学习路线,干货很多,建议收藏,认真阅读。 在校期间,我一直走的都是 Linux C/C++ 学习路线,历经暑期实习、秋招决战、校...
一、继承基础知识C++中的继承1.1继承的基本概念类与类之间的关系has-A,包含关系,用以描述一个类由多个“部件类”构成,实现has-A关系用类的成员属性表示,即一个类的成员属性是另一个已经定义好的类。use-A,一个...
也就是说,C++中,类继承不像java那样只能实行单继承,一个类能同时继承多个类。这符合自然界的规律,比如一个人同时继承自己父亲与母亲的基因。 简单的C++多重继承代码案例: #include <iostream> using ...
和私有继承一样,基类的接口在派生类中也是可用的,但是在继承结构之外是不可用的。 当从派生类派生出另一个类时,私有继承和保护继承之间的主要区别就呈现出来了。使用私有继承,第三代类不能使用基类的接口,这是...
C++程序开发中,设计孤立的类比较容易,设计相互关联的类却比较难,这其中会涉及到两个概念,一个是继承(Inheritance),一个是组合(Composition)。因为二者有一定的相似性,往往令程序员混淆不清。类的组合和...
C++中的继承关系 一、继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象...
1 要有继承 2 要有虚函数重写 3 用父类指针(父类引用)指向子类对象… #include "iostream" using namespace std; class animal { public: virtual int eat() { return 10; } }; ...