C++:隐藏

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
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值