【C++】三种继承方式

三种访问权限

public: 公有成员,是类对外提供的可访问接口,在类内和类外都可以访问;

private: 私有成员,仅在类内可以被访问,对类外隐藏;

protected: 保护成员,同样对类外隐藏,但是在派生类中可以被访问。

三种继承方式

对一个类的派生类来说,在继承基类的过程中,不仅包含了基类的所有成员,还增加了自己的成员,而派生类中成员的访问权限则会因为继承权限方式的不同而不同。

相对于派生类成员的访问权限比较简单(派生类成员的访问权限就是取决于派生类中定义的权限),从基类中继承的成员的访问权限就相对较为复杂,这并不是简单地照搬基类的成员访问权限。基类成员在派生类中的访问权限与继承的方式有着密切的关系,在不同的继承方式下,访问权限也是不同的。

基类成员权限public继承private继承protected继承
publicpublicprivateprotected
privateprivateprivateprivate
protectedprotectedprivateprotected

 

首先,私有成员在派生类中依然是私有的,对于其他两种成员,public继承会保持成员的权限,private和protected继承则跟随继承方式。

#include <iostream>
using namespace std;

class A {
public:
	A() {
	}

public:
	int data1;
protected:
	int data2;
private:
	int data3;
};

class B : public A {
public:
	//公共继承类成员函数访问基类的共有成员
	int fun1() {
		return data1;
	}
	
	//公共继承类成员函数访问基类的保护成员
	int fun2() {
		return data2;
	}

	//公共继承类成员函数访问基类的私有成员
	int fun3() {
		//return data3; //错误A
	}
};

class C : private A {
public:
	//私有继承类成员函数访问基类的共有成员
	int fun1() {
		return data1;
	}

	//私有继承类成员函数访问基类的保护成员
	int fun2() {
		return data2;
	}

	//私有继承类成员函数访问基类的私有成员
	int fun3() {
		//return data3; //错误B
	}
};

class D : protected A {
public:
	//保护继承类成员函数访问基类的共有成员
	int fun1() {
		return data1;
	}

	//保护继承类成员函数访问基类的保护成员
	int fun2() {
		return data2;
	}

	//保护继承类成员函数访问基类的私有成员
	int fun3() {
		//return data3; //错误C
	}
};

int main(int argc, const char *argv[])
{
	B b; //公共继承
	C c; //私有继承
	D d; //保护继承

	int var = 0;

	//公共继承
	b.data1 = var; //D 正确,公有成员公共继承后依然是公有成员,类对象可以访问自身的公有成员
	//b.data2 = var; //E 错误,保护成员公共继承后依然是保护成员,类对象不能访问自身的保护成员
	var = b.fun2(); //F 正确,保护成员继承后依然是保护成员,类对象当然是可以通过类方法访问自身的保护成员的!

	//私有继承
	//c.data1 = var; //G 错误,公有成员私有继承后变成私有成员,类对象不可以访问自身的私有成员
	var = c.fun2(); //H 正确,保护成员在派生类中变成了私有的,当然可以通过类方法访问自身的私有成员!

	//保护继承
	//d.data1 = var; //I 错误,公有成员保护继承后变成保护成员,类对象不可以访问自身的保护成员
	var = d.fun2(); //j 正确,基类保护成员在保护派生类中变成了保护的,当然可以通过类方法访问自身的保护成员!

	return 0;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值