公用继承
//演示:修改Student中的访问限定符,编译及运行,从而查看结果
//当Student中的3个数据成员改为private时,程序的两种改法:
//(1)在Student1中的show1()方法中调用show();
//(2)在main()函数中调用stud1.show()
#include <iostream>
#include<string>
using namespace std;
class Student//声明基类Student
{
public:
Student(int n,string nam,char s) //基类构造函数
{
num=n;
name=nam;
sex=s;
}
void show()
{
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl<<endl;
}
~Student( ) { } //基类析构函数
protected: //保护部分
int num;
string name;
char sex ;
};
class Student1: public Student //声明派生类Student1
{
public: //派生类的公用部分
Student1(int n,string nam,char s,int a,string ad):Student(n,nam,s) //派生类构造函数
{
age=a; //在函数体中只对派生类新增的数据成员初始化
addr=ad;
}
void show1( )
{
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;
cout<<"age: "<<age<<endl;
cout<<"address: "<<addr<<endl<<endl;
}
~Student1( ) { } //派生类析构函数
private: //派生类的私有部分
int age;
string addr;
};
int main( )
{
Student1 stud1(10010,"Wang-li",'f',19,"115 Beijing Road,Shanghai");
Student1 stud2(10011,"Zhang-fun",'m',21,"213 Shanghai Road,Beijing");
Student stud3(20010,"He-xin",'m');
stud1.show1( ); //输出第一个学生的数据
stud2.show( ); //输出第二个学生的数据
stud3.show( ); //输出第二个学生的数据
return 0;
}
私有继承
//演示:修改Student中的访问限定符,编译及运行,从而查看结果
//当Student中的3个数据成员改为private时,程序的改法:
//(1)在Student1中的show1()方法中调用show();
//而不能:
//(2)在main()函数中调用stud1.show()
#include <iostream>
#include<string>
using namespace std;
class Student//声明基类Student
{
public:
Student(int n,string nam,char s) //基类构造函数
{
num=n;
name=nam;
sex=s;
}
void show()
{
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl<<endl;
}
~Student( ) { } //基类析构函数
protected: //保护部分
int num;
string name;
char sex ;
};
class Student1: private Student //声明派生类Student1
{
public: //派生类的公用部分
Student1(int n,string nam,char s,int a,string ad):Student(n,nam,s) //派生类构造函数
{
age=a; //在函数体中只对派生类新增的数据成员初始化
addr=ad;
}
void show1( )
{
show();
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;
cout<<"age: "<<age<<endl;
cout<<"address: "<<addr<<endl<<endl;
}
~Student1( ) { } //派生类析构函数
private: //派生类的私有部分
int age;
string addr;
};
int main( )
{
Student1 stud1(10010,"Wang-li",'f',19,"115 Beijing Road,Shanghai");
Student1 stud2(10011,"Zhang-fun",'m',21,"213 Shanghai Road,Beijing");
Student stud3(20010,"He-xin",'m');
stud1.show1( ); //输出第一个学生的数据
stud2.show( ); //输出第二个学生的数据
stud3.show( ); //输出第二个学生的数据
return 0;
}
保护继承
//演示:修改Student中的访问限定符,编译及运行,从而查看结果
#include <iostream>
#include<string>
using namespace std;
class Student//声明基类Student
{
public:
Student(int n,string nam,char s) //基类构造函数
{
num=n;
name=nam;
sex=s;
}
void show()
{
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl<<endl;
}
~Student( ) { } //基类析构函数
protected: //保护部分
int num;
string name;
char sex ;
};
class Student1: protected Student //声明派生类Student1
{
public: //派生类的公用部分
Student1(int n,string nam,char s,int a,string ad):Student(n,nam,s) //派生类构造函数
{
age=a; //在函数体中只对派生类新增的数据成员初始化
addr=ad;
}
void show1( )
{
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;
cout<<"age: "<<age<<endl;
cout<<"address: "<<addr<<endl<<endl;
}
~Student1( ) { } //派生类析构函数
private: //派生类的私有部分
int age;
string addr;
};
int main( )
{
Student1 stud1(10010,"Wang-li",'f',19,"115 Beijing Road,Shanghai");
Student1 stud2(10011,"Zhang-fun",'m',21,"213 Shanghai Road,Beijing");
Student stud3(20010,"He-xin",'m');
stud1.show1( ); //输出第一个学生的数据
stud2.show( ); //输出第二个学生的数据
stud3.show( ); //输出第二个学生的数据
return 0;
}