c++继承
1.单个基类中, 访问限定符public,protected,privated的作用。
//创建基类Person,分别将数据成员m_strName,m_strGender和int m_iAge置于不同的访问限定符下,
//验证在主函数demo中,对象数据成员和成员函数的性质。
//
//Person.h文件如下:
#include <string>
using namespace std;
class Person
{
public:
Person(string name="han", string male="male" ,int age=28);
~Person();
string m_strName;
void eat();
void setGender(string _gender);
string getGender();
protected:
string m_strGender;
private:
//string m_strGender;
int m_iAge;
};
//Person.cpp文件如下:
//eat()函数本身不带有任何实际意义,仅仅是为了说明问题的需要。
#include <iostream>
#include <string>
#include "Person.h"
using namespace std;
void Person::eat()
{
cout <<"m_strName = "<<m_strName << endl;
cout <<"m_strGender = "<< m_strGender << endl;
cout <<"m_iAge = "<<m_iAge << endl;
}
Person::Person(string name, string male, int age):m_strName(name), m_strGender(male), m_iAge(age)
{
cout << "Person(string name, string male, int age)" << endl;
}
Person::~Person()
{
cout << "~Person()" << endl;
}
void Person::setGender(string _gender)
{
m_strGender = _gender;
}
string Person::getGender()
{
return m_strGender;
}
//demo1.cpp文件
#include <iostream>
#include <stdlib.h>
#include <string>
#include "Person.h"
using namespace std;
int main()
{
Person han;
han.m_strName = "rechard";
//han.m_strGender = "male";
//han.m_iAge = 28;
han.setGender("female");
cout << han.getGender() << endl;
han.eat();
system("pause");
return 0;
}
小结:(1)对于一个基类而言,不能通过“.”运算符设置/改变protected和private限定符下的数据成员,但是可以通过“.”运算符设置/改变访问限定符public下的成员。
(2)可以通过封装函数set设置/改变protected和private限定符下的数据成员。
2.不同继承方式
(1)从Person类公共派生出Worker类
demo2代码
#include <iostream>
#include <stdlib.h>
#include <string>
#include "Worker.h"
using namespace std;
int main()
{
Worker han;
han.m_strName = "rechard_han";
//han.m_strGender = "male";
//han.m_iAge = 29;
han.setGender("female");
cout << han.getGender() << endl;
han.eat();
system("pause");
return 0;
}
demo2 运行结果
(2) protected继承
无法通过编译
(3)private继承同样无法通过编译
子类经不同方式继承父类到底是如何继承的,可以设计三级继承来实现,在此不再赘述,总结如下表所示:
基类成员访问属性 | 继承方式 | 派生类成员访问属性 |
public成员 | public | public |
protected成员 | protected | |
private成员 | 无法访问 |
基类成员访问属性 | 继承方式 | 派生类成员访问属性 |
public成员 | protected | protected |
protected成员 | protected | |
private成员 | 无法访问 |
基类成员访问属性 | 继承方式 | 派生类成员访问属性 |
public成员 | private | private |
protected成员 | private | |
private成员 | 无法访问 |