3-1 公有继承
继承方式:
公有继承
基类成员访问属性是public时:
基类成员访问属性是protected和private时:
上图:成员函数访问时,protected和private都可以被访问,但在继承时出现区别:
上图:Person中的private数据成员被继承到了Worker中的不可见位置(不是private下面),所以派生类的成员函数调用时是禁止的;
总结:
3-2 公有继承代码演示
Person.h
#include <string>
using namespace std;//class也在std里面
class Person
{
public:
Person();
~Person();
void eat();
protected:
string m_strName;
private:
int m_iAge;
};
Person.cpp
#include "Person.h"
#include <iostream>
using namespace std;
Person::Person()
{
cout<<"Person()"<<endl;
}
Person::~Person()
{
cout<<"~Person()"<<endl;
}
void Person::eat()
{
m_strName = "zhang";
m_iAge = 20;
cout<<"eat()"<<endl;
}
Worker.h
#include "Person.h"
class Worker:public Person //公有继承
{
public:
Worker();
~Worker();
void work();
int m_iSalary;
};
Worker.cpp
#include <iostream>
#include "Worker.h"
using namespace std;
Worker::Worker()
{
cout<<"Worker()"<<endl;
}
Worker::~Worker()
{
cout<<"~Worker()"<<endl;
}
void Worker::work()
{
m_strName = "zzz";
//m_iAge = 20;会报错:“Person::m_iAge”: 无法访问 private 成员
cout<<"work()"<<endl;
}
demo.cpp
#include <iostream>
#include <stdlib.h>
#include "Worker.h"
using namespace std;
int main()
{
/*Worker worker1;
worker1.m_strName = "Jim";
worker1.m_iAge = 10;
worker1.eat();
worker1.m_iSalary = 10000;
worker1.work();*/
Person p1;
p1.eat();
//p1.m_strName = "jerry";会报错:无法访问 protected成员
//p1.m_iAge = 10;//会报错:无法访问 private 成员
Worker w1;
w1.work();
system("pause");
return 0;
}
运行结果
Person()
eat()
Person()
Worker()
work()
请按任意键继续. . .