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++ 深入理解 虚继承、多重继承和直接继承

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

【虚函数、虚拟指针、虚表指针】解析多重继承时,虚表的分布

#include using namespace std; //抽象基类:动物类 class CAnimal { public: virtual void EatFood(string str...
  • xiaorui51
  • xiaorui51
  • 2016年01月08日 13:56
  • 827

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

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

c++学习之继承篇(多重继承之虚继承)

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

关于多重继承和虚拟继承

这两个概念在C++的书里面似乎也很少提及,所以看到这两个名词的时候我也往往自动忽略,今天有时间上网百度了一下,找到三篇写得不错的文章: 《详解多重继承》 《关于C++中的虚拟继承的一些总结》 《详解C...
  • huang1433
  • huang1433
  • 2015年11月02日 14:45
  • 388

多重继承与虚基类

多重继承(multiple inheritance,MI)。
  • u012303544
  • u012303544
  • 2015年08月03日 21:13
  • 583

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

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

C++多重继承的指针问题

下面说说C++多重继承中关于指针的一些问题。指针指向问题 先看下面的程序:class Base1 { public: virtual void fun1() {cout ...
  • T_27080901
  • T_27080901
  • 2015年05月17日 21:04
  • 1024

c++多重继承下虚函数的this指针问题

今天偶然发现一个很有意思的问题,在vc编译器想检查有没有内存泄露,于是在一个类的构造函数和析构函数各下一个断点,追踪特定分配出来的一个对象实例有没有析构。却发现无论如何都没有析构,但是使用vld内存检...
  • river_mumu
  • river_mumu
  • 2013年02月25日 12:02
  • 869

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

C++ 深入理解 虚继承、多重继承和直接继承
  • yuanchunsi
  • yuanchunsi
  • 2017年12月02日 18:14
  • 59
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++第二十三天 多重继承与虚继承
举报原因:
原因补充:

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