4-1 C++隐藏
什么是隐藏:(父子关系、成员同名、隐藏)
例子1:
例子2:
4-1 C++隐藏编码
Person.h
#include <string>
using namespace std;//class也在std里面
class Person
{
public:
Person();
void play();
protected:
string m_strName;
};
Person.cpp
#include "Person.h"
#include <iostream>
using namespace std;
Person::Person()
{
m_strName = "Merry";
}
void Person::play()
{
cout<<"Person - play()"<<endl;
cout<<m_strName<<endl;
}
Soldier.h
#include "Person.h"
class Soldier:public Person //公有继承
{
public:
Soldier();
void play();
void work();
protected:
string m_strName;
};
Soldier.cpp
#include <iostream>
#include "Soldier.h"
using namespace std;
Soldier::Soldier()
{
}
void Soldier::play()
{
cout<<m_strName<<endl;
cout<<Person::m_strName<<endl;
cout<<"Soldier - play()"<<endl;
}
void Soldier::work()
{
m_strName = "Mike";
Person::m_strName = "James";
cout<<"Soldier - work()"<<endl;
}
demo.cpp
#include <iostream>//cout和endl在里面
#include <stdlib.h>
#include "Soldier.h"//""搜索在同一个目录下的头文件,<>搜索程序的默认库;
using namespace std;
int main()
{
Soldier s1;
s1.work();
s1.play();
s1.Person::play();//加参数也无法形成重载,只能这样调用
system("pause");
return 0;
}
运行结果
Soldier - work()
Mike
James
Soldier - play()
Person - play()
James
请按任意键继续. . .
4-7 巩固练习
定义两个类,基类是人类,定义数据成员姓名(name),及成员函数void attack()。
士兵类从人类派生,定义与人类同名的数据成员姓名(name)和成员函数void attack()。
通过对同名数据成员及成员函数的访问理解成员隐藏的概念及访问数据的方法。
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
/**
* 定义人类: Person
* 数据成员: m_strName
* 成员函数: attack()
*/
class Person
{
public:
string m_strName;
void attack()
{
cout << "attack" << endl;
}
};
/**
* 定义士兵类: Soldier
* 士兵类公有继承人类
* 数据成员: m_strName
* 成员函数: attack()
*/
class Soldier:public Person
{
public:
string m_strName;
void attack()
{
cout << "fire!!!" << endl;
}
};
int main(void)
{
// 实例士兵对象
Soldier soldier;
// 向士兵属性赋值"tomato"
soldier.m_strName = "tomato";
// 通过士兵对象向人类属性赋值"Jim"
soldier.Person::m_strName = "Jim";
// 打印士兵对象的属性值
cout << soldier.m_strName << endl;
// 通过士兵对象打印人类属性值
cout << soldier.Person::m_strName << endl;
// 调用士兵对象方法
soldier.attack();
// 通过士兵对象调用人类方法
soldier.Person::attack();
return 0;
}
运行结果:
tomato
Jim
fire!!!
attack