主要探索:
1 派生类对基类protecteed public private三种数据访问 和这三种继承方式比较。
2 派生类包含子对象。
3 子类包含构造函数。
通过public方式继承:
具体示例:
#include <iostream>
#include <string>
using namespace std;
//定义基类
class people
{
//子类私有对象只能在本类访问,与继承方式无关
private:
string _name;
//采用protected 就表明将要采用继承
protected:
int _age;
public:
//子类构造函数
people(string name,int age):_name(name),_age(age){}
//用来输出数据成员
void display(){
cout<<"name :"<<this->_name<<endl
<<"age :"<<this->_age<<endl;
}
};
//定义派生类
//通过public方式继承基类
class student:public people
{
private:
int _num;
people peo; //定义子对象
public:
//定义派生类构造函数 如果子对象 或者基类含有构造函数 必须进行赋值
student(int num,string name,int age,string objName,int objNum):_num(num),people(name,age),peo(objName,objNum){}
void show(){
cout<<"num :"<<this->_num<<endl;
display(); //直接调用基类函数
peo.display(); //通过对象调用 基类函数 可以直接调用基类protected成员
cout<<"调用基类protected成员age :"<<_age<<endl;
}
};
int main(){
student stu(100,"buyingfei",22,"objname",23);
stu.show();
stu.display(); //可以通过对象直接调用基类public成员
return 0;
}
运行结果:
通过protected方式继承:
#include <iostream>
#include <string>
using namespace std;
//定义基类
class people
{
//子类私有对象只能在本类访问,与继承方式无关
private:
string _name;
//采用protected 就表明将要采用继承
protected:
int _age;
public:
//子类构造函数
people(string name,int age):_name(name),_age(age){}
//用来输出数据成员
void display(){
cout<<"name :"<<this->_name<<endl
<<"age :"<<this->_age<<endl;
}
};
//定义派生类
//通过public方式继承基类
class student:protected people
{
private:
int _num;
people peo; //定义子对象
public:
//定义派生类构造函数 如果子对象 或者基类含有构造函数 必须进行赋值
student(int num,string name,int age,string objName,int objNum):_num(num),people(name,age),peo(objName,objNum){}
void show(){
cout<<"num :"<<this->_num<<endl;
display(); //直接调用基类函数
peo.display(); //通过对象调用 基类函数 可以直接调用基类protected成员
cout<<"调用基类protected成员age :"<<_age<<endl;
}
};
int main(){
student stu(100,"buyingfei",22,"objname",23);
stu.show();
// stu.display(); 通过protected方式不能再类外访问基类成员
return 0;
}
运行结果:
通过private方式:
#include <iostream>
#include <string>
using namespace std;
//定义基类
class people
{
//子类私有对象只能在本类访问,与继承方式无关
private:
string _name;
//采用protected 就表明将要采用继承
protected:
int _age;
public:
//子类构造函数
people(string name,int age):_name(name),_age(age){}
//用来输出数据成员
void display(){
cout<<"name :"<<this->_name<<endl
<<"age :"<<this->_age<<endl;
}
};
//定义派生类
//通过public方式继承基类
class student:private people
{
private:
int _num;
people peo; //定义子对象
public:
//声明派生类构造函数
student(int num,string name,int age,string objName,int objNum);
void show(){
cout<<"num :"<<this->_num<<endl;
display(); //直接调用基类函数
peo.display(); //通过对象调用 基类函数 可以直接调用基类protected成员
cout<<"调用基类protected成员age :"<<_age<<endl;
}
};
//定义派生类构造函数
student::student(int num,string name,int age,string objName,int objNum):_num(num),people(name,age),peo(objName,objNum){}
int main(){
student stu(100,"buyingfei",22,"objname",23);
stu.show();
// stu.display(); 通过protected方式不能再类外访问基类成员
return 0;
}
运行结果: