C++第二十三天 多重继承与虚继承

原创 2014年08月15日 09:23:08
/*
多重继承与虚继承:
	定义多重继承:
		派生类继承的基类可以通过使用逗号(,)隔开多个基类,派生类为每个基类显式或隐式指定访问级别(public,private,protected)。对于类可以继承的基类的数目没有语言强加限制,但在一个给定派生列表中,一个基类只能出现一次。

	
	派生类的构造次序:
		基类构造函数按照基类构造函数在派生列表中的出现次序调用。从最终基类开始初始化。构造函数调用次序不受高早函数初始化列表中哦出现的基类影响,也不受基类在构造函数初始化列表中的出现次序的影响。析构函数调用的次序则相反。

	基于指针类型或引用类型的查找:
		当一个类继承于多个基类的时候,那些基类之间没有隐含的关系,不允许使用一个基类的指针访问其他基类的成员。
	
多继承下的类作用域:
	当一个类油多个基类的时候,通过所有直接基类同时进行名字查找,多重继承派生类油可能从两个或多个基类继承同名成员,对该成员不加限定的使用是二义性的。

虚继承:
	虚继承是一种机制,类通过指出它希望共享其虚基类的状态。在虚继承下,对给定虚基类,无论该类在派生层次中作为虚基类出现多少次,值继承一个共享的基类子对象。共享的基类子对象称为虚基类。

虚基类的声明:
	通过关键子irtual修改声明,将基类指定为通过虚继承派生:
		class className : virtual public baseName{};
	任何指定为基类的类也可以被指定为虚基类,虚基类可以包含通常由非基类支持的任意类元素。

特殊的初始化语义:
	在虚派生中,由最低层次派生类的构造函数初始化虚基类。	
*/
#include<string>
#include<vector>
struct Base1{
	void print(int a) const{}
protected:
	int ival;
	double dval;	
	char cval;
private:
	int *id;
};

struct Base2{
	void print(double b) const{}
protected:
	double fval;
private:
	double dval;
};
struct Derived:public Base1{
	void print(std::string) const;
protected:
	std::string sval;
	double dval;
};
struct MI:public Derived,public Base2{
	void print(std::vector<double>);
protected:
	int *ival;
	std::vector<double> dvec;
};
int main(){

	MI mi;

	//不能直接调用基类的基类的成员,下面出错。
//	mi.print(42);

	return 0;
}


相关文章推荐

C++ primer第二次阅读学习笔记(第17章:用于大型程序的工具:多重继承与虚继承) .

第十七章:用于大型程序的工具:多重继承与虚继承 多重继承是从多于一个直接基类派生类的能力。多重继承的派生类继承其所有父类的属性。 为了支持多重继承,应扩充派生列表,多个类用逗号分割。如: cla...

C++ 多重继承 虚继承 虚函数表 多态

C++中的多重继承和虚继承是一个非常重要的概念,也是看你是不是懂C++的一个重要的标志之一。这中间包括了运行时多态,虚函数表等等相关概念。 多重继承,顾名思义,是一个类继承了多个父类。例如class...
  • Troy_Wu
  • Troy_Wu
  • 2016年03月25日 15:05
  • 1791

c++ 多重继承(包含虚继承)重载operator==

使用dymaic_cast typeid 虚函数 对operator ==进行重载//Animal.h #pragma once #include using std::string; namespa...

C++中多重继承与虚继承资料的整理

最近在看C++的东西,看了好多多重继承的问题,有些说的很简单,有的说的很繁琐,把资料整理一下。在多重继承中,基类的构造函数的调用次序既不受派生类构造函数初始化列表中出现的基类构造函数的影响,也不受基类...

C++ Primer学习笔记——$19 多重继承与虚继承(转自:http://blogold.chinaunix.net/u/18517/showart_252162.html)

题记:本系列学习笔记(C++ Primer学习笔记)主要目的是讨论一些容易被大家忽略或者容易形成错误认识的内容。只适合于有了一定的C++基础的读者(至少学完一本C++教程)。  作者: tyc611...
  • lslxdx
  • lslxdx
  • 2011年05月05日 22:35
  • 377

C++ 多重继承和虚继承 内存分布

转自:http://www.oschina.net/translate/cpp-virtual-inheritance 多重继承 首先我们考虑一个(...

C++对象模型:多重继承和虚继承的内存布局

这是一篇译文,原文地址:这里;  翻译的文章转自:点击打开链接     这篇文章主要讲解虚继承的C++对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数...

从零开始学C++之继承(三):多重继承、虚继承与虚基类

一、多重继承 单重继承——一个派生类最多只能有一个基类 多重继承——一个派生类可以有多个基类 class 类名: 继承方式 基类1,继承方式 基类2,…. {….}; 派生类同时继承多个基类的成...

<C++略识>之多重继承、多继承、虚继承

问题:什么是多重继承? 定义三个类:人、士兵、步兵,则有:步兵士兵人,这样的关系称之为多重继承,写法如下:class Person { }; classSoldier:publicPerson ...

Linux Debugging(四): 使用GDB来理解C++ 对象的内存布局(多重继承,虚继承)

关于C++虚函数,很多博文从各个角度来探究虚函数是如何实现的,或者说编译器是如何实现虚函数的。本文通过GDB来从另外一个角度来理解C++ object的内存布局,一来熟悉语言背后编译器为了实现语言特性...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++第二十三天 多重继承与虚继承
举报原因:
原因补充:

(最多只允许输入30个字)