中国大学MOOC程序设计与算法(三):C++ 面向对象程序设计 第五周 继承 笔记 之 覆盖和保护成员

第五周 继承
1.继承和派生的基本概念
2.继承关系和复合关系
3.覆盖和保护成员
4.派生类的构造函数
5.公有(public)继承的赋值兼容原则

3.覆盖和保护成员

派生类覆盖基类成员

派生类可以定义一个和基类成员同名的成员,这叫覆盖。在派生类中访问这类成员时,缺省的情况(不交代访问的是哪一个)是访问派生类中定义的成员。要在派生类中访问由基类定义的同名成员时,要使用作用域符号::。

class base {
	int j;
public:
	int i;
	void func();
};
class derived :public base{
public:
	int i;//覆盖基类,现实中一般派生类中不写同名的成员变量,但经常写同名成员函数
	void access();
	void func();//覆盖基类
};
void derived::access() {
	j = 5; //error,不能访问基类的私有成员
	i = 5; //引用的是派生类的 i
	base::i = 5; //引用的是基类的 i
	func(); //派生类的
	base::func(); //基类的
}
derived obj;
obj.i = 1;
obj.base::i = 1;

注意:一般来说,基类和派生类不定义同名成员变量,但经常写同名成员函数。
在这里插入图片描述

类的保护成员

存取权限说明符:protected
基类的private成员:可以被下列函数访问
– 基类的成员函数
– 基类的友元函数
基类的public成员:可以被下列函数访问
– 基类的成员函数
– 基类的友元函数
– 派生类的成员函数
– 派生类的友元函数
– 其他的函数
基类的protected成员:可以被下列函数访问
– 基类的成员函数
– 基类的友元函数
– 派生类的成员函数可以访问当前对象的基类的保护成员

class Father {
	private: int nPrivate; // 私有成员
	public: int nPublic; // 公有成员
	protected: int nProtected; //  保护成员
};
class Son :public Father{
	void AccessFather () {
		nPublic = 1; // ok;
		nPrivate = 1; // wrong
		nProtected = 1; // OK ,访问从基类继承的protected 成员
		Son f;
			f.nProtected = 1; //wrong  ,f 不是当前对象
	}
};
int main()
{
	Father f;
	Son s;
		f.nPublic = 1; // Ok
		s.nPublic = 1; // Ok
		f.nProtected = 1; // error
		f.nPrivate = 1; // error
	s.nProtected = 1; //error
		s.nPrivate = 1; // error
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值