C++ 多重继承

2014-11-24 08:40:36 · 作者: · 浏览: 0

1.多重继承的概念:一个类有两个或者更多个基类

形式为 class <类名>:<访问属性> class <类名>,<访问属性> class <类名>

如 class A:public class B,public class C

上面的定义中,如果B和C都有print函数,这时A类的对象调用print函数,将会发生二义性,这是多重继承存在的缺陷,避免这种二义性,可以用域访问符::,如A类的对象a访问B类中的print函数,可以用a.B::print().

2.在多重继承下,一个基类可以再派生层次中出现多次,比如下面的继承结构

\

< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+QcDgxcnJ+qGhQrrNQ8Dgo6xEwOC8zLPQ19RCwOC6zUMgwOChozwvcD4KPHA+RMDgtcS21M/z0djXxUGhqkKhqkS1xLe9z/LT0MHLQbXE0ru33bixsb6jrNHY18VBoapDoapEtcS3vc/y09DBy7Xatv649rixsb6jrNXiyrHU2rX308PEs9Cps8nUscqxxNHD4rvhs/bP1rb+0uXQ1KOsQyYjNDM7JiM0MzvS/cjrwcvQ6bzMs9C7+tbGwLS94r721eK49s7KzOKjrL2rQcDgyfnD986qQsDgus1DwOC1xNDpu/nA4KOs1eLR+UTA4LXEttTP89a7u+G6rNPQQcDgtcTSu7j2uLGxvqGjPC9wPgo8cD7Q6bv5wOC1xMn5w/fSqrzTyc92aXJ0dWFsudi8/NfWo6y3vcq9yOfPwqO6PC9wPgo8cD5DbGFzcyBCOnZpcnR1YWwgcHViaWMgQTwvcD4KPHA+Q2xhc3MgQzp2aXJ0dWFsIHB1YmxpYyBBPC9wPgo8cD7U2rvYtb241bjVvbK1vbXEtv7S5dDUzsrM4qOsyOe5+0HA4NPQs8nUsXgsxMfDtETA4LXEttTP89Tat8POyrPJ1LF4yrGjrL/J0tTN6sirz/uz/bb+0uXQ1MLwo7+yorK7xNzN6sirz/uz/aGj1eLA79Kqt9bI/dbWx+m/9jwvcD4KPHA+o6gxo6nI57n7eL32vfbU2kHA4NbQs/bP1qOstffTw7PJ1LF4vavDu9PQtv7S5dDUPC9wPgo8cD6jqDKjqcjnuft4s8nUsdTaQcDg1tC6zULA4NbQzazKsbP2z9ajrETA4LbUz/O199PDtcS9q8rHQsDgtcSzydSxeKOs1eLLtcP3xcnJ+sDgtcTKtcD908XPyLy2uN/T2rmyz+3Q6bv5wOC1xMq1wP08L3A+CjxwPqOoM6OpyOe5+3izydSx1NpCwODW0LrNQ8Dg1tDNrMqxs/bP1qOsRMDgttTP87X308OzydSxeMqxo6y9q7vhs/bP1rb+0uXQ1DwvcD4KPHA+IDwvcD4KPHA+z8LD5srHy7XD97XEtPrC66O6PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;"># include using namespace std; class Base { public: Base(int t):x(t){} void print(){cout<

3.虚继承中的构造顺序和析构顺序

在上面四个类ABCD的继承层次中,构造函数的调用顺序为A―B―C―D ,析构函数的调用顺序刚好相反。

在更复杂的继承结构中,虚基类和普通基类同时出现,虚基类的调用优先级高于非虚基类,不管虚基类位于什么继承层次,虚基类的构造函数在非虚基类之前调用。