/*继承
*该实例中有传递继承(作者自己起的名字),即3继承2,2又继承1
*私有成员在其公有继承的派生类中不可访问
*/
#include <iostream>
#include <string.h>
using namespace std;
//基类,有一个私有成员msg和受保护成员n
class Base
{
private:
char msg[30];
protected:
int n;
public:
Base(string s,int m=0):n(m){
strcpy(msg,s.c_str());
}
void output(void){
cout<<n<<endl<<msg<<endl;
}
};
//类Derived1,公有继承Base,可访问基类的受保护元素,其本身有一个私有成员n
class Derived1:public Base
{
private:
int n;
public:
//构造函数,先构造基类
Derived1(int m=1):Base("Base",m-1){
n=m;
}
void output(void){
cout<<n<<endl;
Base::output();
}
};
//类Derived2,公有继承Derived1,可访问基类受保护元素,其本身有一个私有成员n
class Derived2:public Derived1
{
private:
int n;
public:
//构造函数,先构造基类
Derived2(int m=2):Derived1(m-1){
n=m;
}
void output(void){
cout<<n<<endl;
Derived1::output();
}
};
int main()
{
//定义一个基类成员B,并初始化
Base B("Base Class",1);
//定义一个类Derived2,没有传参时使用默认参数2故其n=2,此时先用m-1构造Derived1,因为有传参故其n= 1,构造Derived1时又将调用Base类构造函数,其n=0,由于传参只传了一个参数,故msg室友默认参数
Derived2 D;
B.output(); //这个打印毫无疑问是1 "Base Class"
D.output(); //这个就麻烦了,先要构造Derived1.然后构造Base,打印的时候先打印Derived2的n,然后调用Derived1打印其n然后调用Base打印其n和msg
}
*该实例中有传递继承(作者自己起的名字),即3继承2,2又继承1
*私有成员在其公有继承的派生类中不可访问
*/
#include <iostream>
#include <string.h>
using namespace std;
//基类,有一个私有成员msg和受保护成员n
class Base
{
private:
char msg[30];
protected:
int n;
public:
Base(string s,int m=0):n(m){
strcpy(msg,s.c_str());
}
void output(void){
cout<<n<<endl<<msg<<endl;
}
};
//类Derived1,公有继承Base,可访问基类的受保护元素,其本身有一个私有成员n
class Derived1:public Base
{
private:
int n;
public:
//构造函数,先构造基类
Derived1(int m=1):Base("Base",m-1){
n=m;
}
void output(void){
cout<<n<<endl;
Base::output();
}
};
//类Derived2,公有继承Derived1,可访问基类受保护元素,其本身有一个私有成员n
class Derived2:public Derived1
{
private:
int n;
public:
//构造函数,先构造基类
Derived2(int m=2):Derived1(m-1){
n=m;
}
void output(void){
cout<<n<<endl;
Derived1::output();
}
};
int main()
{
//定义一个基类成员B,并初始化
Base B("Base Class",1);
//定义一个类Derived2,没有传参时使用默认参数2故其n=2,此时先用m-1构造Derived1,因为有传参故其n= 1,构造Derived1时又将调用Base类构造函数,其n=0,由于传参只传了一个参数,故msg室友默认参数
Derived2 D;
B.output(); //这个打印毫无疑问是1 "Base Class"
D.output(); //这个就麻烦了,先要构造Derived1.然后构造Base,打印的时候先打印Derived2的n,然后调用Derived1打印其n然后调用Base打印其n和msg
}