/*
* inheritClass.cpp
*
* Created on: 2016年7月18日
* Author: zroad
*/
#include<iostream>
#include<cstring>
using namespace std;
class BaseClass {
public:
BaseClass() {}
void f(char *s = "unkown") {
cout << "Fucntion f() in BaseClass called from " << s << endl;
h();
}
protected:
void g(char *s = "unkown") {
cout << "Function g() in BaseClass called from " << s << endl;
}
private:
void h() {
cout << "Function h() in BaseClass!\n";
}
};
//一、继承定义中的基类限定访问符:
//public:基类中的public、protected、private按照原访问规则
//protected:基类中的pulic访问权限限制为protected
//private:基类中的public、protected访问权限全部限制为private
class Derived1Level1 : public virtual BaseClass {
public:
void f(char *s = "unknow") {
cout << "Function f() in Derived1Level1 called from " << s << endl;
g("Derived1Level1");
h("Derived1Level1");
}
//二、派生类可重写基类方法,并扩展新的成员函数或是成员变量
void h(char *s = "unknow") {
cout << "Function h() in Derived1Level1 called from " << s << endl;
}
};
//三、虚继承的定义使得多继承中重复定义的成员仅只调用一次
/*
在多继承下,虚继承就是为了解决菱形继承中,B,C都继承了A,D继承了B,C,那么D关于 A的引用只有一次,而不是 普通继承的 对于A引用了两次……
格式:可以采用public、protected、private三种不同的继承关键字进行修饰,只要确保包含virtual就可以了。
*/
class Derived2Level1 : public virtual BaseClass {
public:
void f(char *s = "unkown") {
cout << "Function f() in Derived2Level1 called from " << s <<endl;
g("Derived2Level1");
}
};
class Derived2Level2 : public Derived1Level1, public Derived2Level1 {
public:
void f(char *s = "unknow") {
cout << "Function f() in Derived2Level2 called from " << s << endl;
g("Derived2Level2");
//通过类名+作用域限定符用来定义唯一成员访问
Derived1Level1 :: h("Derived2Level2");
BaseClass :: f("Derived2Level2");
}
};
int main() {
BaseClass bc;
Derived1Level1 d1l1;
Derived2Level1 d2l1;
Derived2Level2 d2l2;
bc.f("BaseClass");
cout << "..............................." << endl;
d1l1.f("Derived1Level1");
cout << "-------------------------------" << endl;
d2l1.f("Derived2Level1");
cout << "+++++++++++++++++++++++++++++++" <<endl;
d2l2.f("Derived2Level2");
return 0;
}
类继承、虚继承
最新推荐文章于 2024-07-30 15:08:40 发布