C++中的三类继承笔记

C++中的三类继承


原文链接

1.归纳表格

继承方式基类的public成员基类的protect成员基类的private成员继承引起的访问控制权变化
public继承仍为public成员仍为protected成员不可见基类的非私有成员在子类的访问属性都不变
protected继承变为protected成员仍为protected成员不可见基类的非私有成员都成为子类的保护成员
private继承变为private成员变为private成员不可见基类的非私有成员都成为子类的私有成员

2.举个例子

#include<iostream>
using namespace std;
class Base {
private:
	int _priB;
protected:
	int _proB;
public:
	int _pubB;
	Base(int pri, int pro, int pub) {
		cout << "Construct Base " << endl;
		_priB = pri;
		_proB = pro;
		_pubB = pub;
	}
};
class A :public Base {
public:
	A(int pri, int pro, int pub) :Base(pri, pro, pub) {
		cout << "Construct A " << endl;
	}
	void showInfo() {
		//cout << _priB << endl;  //error,基类私有成员在派生类中不可见
		cout << _proB << endl;    //ok,仍为protected成员
		cout << _pubB << endl;    //ok,仍为public成员
	}
};
class B :protected Base {
public:
	B(int pri, int pro, int pub) :Base(pri, pro, pub) {
		cout << "Construct B " << endl;
	}
	void showInfo() {
		//cout << _priB << endl;  //error,基类私有成员在派生类中不可见
		cout << _proB << endl;    //ok,仍为protected成员
		cout << _pubB << endl;    //ok,变为protected成员
	}
};
class C :private Base {
public:
	C(int pri, int pro, int pub) :Base(pri, pro, pub) {
		cout << "Construct C " << endl;
	}
	void showInfo() {
		//cout << _priB << endl;  //error,基类私有成员在派生类中不可见
		cout << _proB << endl;    //ok,变为private成员
		cout << _pubB << endl;    //ok,变为private成员
	}
};
void main() {
	A a(1, 2, 3);
	B b(4, 5, 6);
	C c(7, 8, 9);
	cout << a._pubB << endl;   //ok,仍为public成员
	//cout << b._pubB << endl; //error,变为protected成员
	//cout << c._pubB << endl; //error,变为private成员
	a.showInfo();
	b.showInfo();
	c.showInfo();
}

总结:

  • public继承是一种接口继承,基类可用的成员对子类也是可用的
  • 如果基类的成员不想再类外访问,但要在派生类中访问,就定义为protected
  • 不管是哪种继承,基类的私有成员在派生类中是不可见的
  • class的默认继承方式是private,struct的默认继承方式是public
  • 实际应用中一般用public继承
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值