c++继承

网上有很多资料已经对c++的继承描述得非常清楚了。这里是我学习c++笔记,加深印象。c++一个类里面有public,protected,private属性的成员和方法,类的继承方式也有public,protected这三种方式。当继承方式为public时,基类的成员是什么属性被继承到派生类中就是什么属性,当继承方式为protected时,基类的成员被继承到派生类中,原先是public属性的成员变成了protected属性,protected和private属性的成员保持属性不变,当继承方式为private时,public属性和protected属性的成员都变成private属性。这个都很好理解!(以上说的成员包括方法)

下面来说说类中成员不同属性的访问权限,以public继承方式为例

#ifndef BASE_H_
#define BASE_H_

class Base {
public:
	Base();
	virtual ~Base();
	int fun();
	int base;
protected:
	int base1;

private:
	int base2;
};


#endif /* BASE_H_ */
#include "Base.h"
#include <iostream>
using namespace std;
Base::Base() {
	// TODO Auto-generated constructor stub
	base = 0;
	base1 = 1;
	base2 = 2;
}

Base::~Base() {
	// TODO Auto-generated destructor stub
}
int Base::fun(){
	cout<<"Base::fun"<<endl;
	return base2;
}

#ifndef DERIVED_H_
#define DERIVED_H_

#include "Base.h"

class Derived: public Base {
public:
	Derived();
	virtual ~Derived();
	void der();
};

#endif /* DERIVED_H_ */


#include "Derived.h"
#include <iostream>
using namespace std;

Derived::Derived() {
	// TODO Auto-generated constructor stub

}
Derived::~Derived() {
	// TODO Auto-generated destructor stub
}
void Derived::der(){
	base = 5;
	cout << "Der base="<<base<<endl;
	base1 = 10;
	cout << "Der base1="<<base1<<endl;
//	base2 = 20; 错误
}

#include "Base.h"
#include "Derived.h"
#include <iostream>
using namespace std;


int main(){
	Base b;
	cout << "main b base1="<<b.base<<endl;
//	cout << "main b base1="<<b.base1<<endl;错误
//	cout << "main b base1="<<b.base2<<endl;错误
	Derived d;
	cout << "main d base1="<<d.base<<endl;
//	cout << "main d base1="<<d.base1<<endl;错误
//	cout << "main d base1="<<d.base2<<endl;错误
	cout << "fun return "<<d.fun()<<endl;
	d.der();
}

以上的代码是Derived类继承Base类,大家可以看到public修饰的成员base在哪里都可以访问,而protected修饰的成员base1只能在基类和派生类类中去访问。private只能在自身类中访问。还有一点说明的就是其实private成员是可以被继承到派生类中的,只是不能去访问而已,你们看cout << "fun return "<<d.fun()<<endl;这条语句,fun函数是基类中一个public修饰的方法,里面返回的是一个private修饰的成员,而派生类把基类的fun方法继承了下来,并可以调用,就返回了一个private修饰的base2,如果派生类没有把基类的private成员继承下来,又怎么会有base2呢?不过其实关系不大,因为访问的权限都是一样的,也可以看作没有继承下来。派生类并不能访问基类的private,除非基类留有接口让派生类访问。

最后打印结果

main b base1=0
main d base1=0
Base::fun
fun return 2
Der base=5
Der base1=10


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值