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++学习之继承篇(多重继承之虚继承)

虚继承 是面向对象编程中的一种技术,是指一个指定的基类,在继承体系结构中,将其成员数据实例共享给也从这个基类型直接或间接派生的其它类。形式:在继承定义中包含了virtual关键字的继承关系,如下图中,...
  • hudfang
  • hudfang
  • 2016-01-25 12:09:51
  • 1012

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

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

C++ 深入理解 虚继承、多重继承和直接继承

本文从5段代码实例出发,通过类中类的普通继承,类的虚继承,类的多重继承,多个虚函数类的普通继承、虚继承与多重继承,几个交叉概念,详细的阐释了继承、虚函数与虚继承的基本概念,深入剖析了继承于虚继承的区别...
  • u013630349
  • u013630349
  • 2015-07-25 16:54:24
  • 8199

C++ Primer 有感(多重继承与虚继承)

1.多重继承的构造次序:基类构造函数按照基类构造函数在类派生列表中的出现次序调用,构造函数调用次序既不受构造函数初始化列表中出现的基类的影响,也不受基类在构造函数初始化列表中的出现次序的影响。2.在单...
  • ctthunagchneg
  • ctthunagchneg
  • 2013-07-01 14:53:51
  • 1333

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

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

C++菱形继承与虚继承

虚继承,菱形继承
  • xiaolewennofollow
  • xiaolewennofollow
  • 2016-08-14 12:20:18
  • 930

C++ Primer笔记(十七)多重继承与虚继承

多重继承是从多于一个直接基类派生类的能力。多重继承的派生类继承其所有父类的属性。 为了支持多重继承,应扩充派生列表,多个类用逗号分割。如: class panda:public bear,publ...
  • woshibendangao
  • woshibendangao
  • 2014-04-27 11:11:55
  • 1029

C++多重继承,virtual虚拟继承解决多重继承中的二义性

C++多重继承经常出现,下面我们来讨论一种比较特殊的多重继承方式--菱形继承。 问题的提出:我们定义了一个动物类A,由A又可以派生出水栖生活动物类B(鲨鱼、螃蟹等)和陆栖...
  • sandloves
  • sandloves
  • 2010-06-26 08:32:00
  • 937

C++入门(12):高级OOP技术:重载操作符、多继承和虚继承

C++入门(12):高级OOP技术:重载操作符、多继承和虚继承重载操作符 如果要重载某个操作符(比如加号+),只需创建一个名为 operator+ 的方法即可:type operate+(Mytyp...
  • qq_33256568
  • qq_33256568
  • 2016-01-09 21:01:42
  • 403

c++多重继承和虚继承及虚函数深入理解

 先看一例子:  class   base     {     public:     virtual   void   f()   const   {};     };         class ...
  • eroswang
  • eroswang
  • 2007-10-24 17:29:00
  • 3682
收藏助手
不良信息举报
您举报文章:C++第二十三天 多重继承与虚继承
举报原因:
原因补充:

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