关于private继承

首先先来说一下public,protected,private三中访问控制模式的区别:

1.private成员  只能被类中的(公有、保护、私有)成员函数访问(函数体中访问,通过类的this指针)以及友元函数访问。在派生类的成员函数以及类外不能够被直接访问。当然 可以间接访问,在派生类中可以通过继承的基类的公有及保护成员函数间接访问,类外则可以通过对象调用类的公有成员函数来间接访问。

2. protected成员  可以被类中的成员函数、派生类的成员函数以及友元函数访问。在类外不能够被(通过对象调用)直接访问。当然也可以间接访问。

3. public成员        可以被类中的成员函数、派生类的成员函数、友元函数以及类外通过对象调用访问。

private继承是一种实现技术,主要用于根据某个类实现另一个类(is-implemented-in-terms-of)。基类的成员无论其访问模式是什么,经过private继承之后在派生类中的访问控制模式均变成private,因此在派生类中不能直接访问。(此处错误)。更正:基类的public和protected成员在派生类中的访问属性相当于派生类中(自有)的私有成员,即派生类的成员函数能访问它们,但在派生类外不能访问它们。基类的private成员在派生类中访问属性当然还是private,但派生类不可访问(不是自有的)。

private继承的实现形式是在派生类的成员函数中通过显式)调用基类的成员函数来实现派生类成员函数的功能。当然这要求基类成员函数在基类中的的访问权限是public或protected(这些基类成员函数在派生类中变为private,这只说明在派生类,没有继承接口,即不能在派生类成员函数中通过this指针调用,也不能在类外通过对象调用,但这不妨碍在派生类成员函数中调用(此时它们相当于派生类的私有成员,可以直接调用)或通过基类显式调用因为它们函数实现的访问模式为public以及protected,因此在类外(派生类中)可以使用)。

使上面的说法成立的原因是private继承只继承实现不继承接口。

#include <iostream>
using namespace std;
class A
{
public:
	A(){ma = 1;mb = 2;}
	A(int i1,int i2){ma=i1;mb=i2;}
	void display(){ cout<<ma<<" "<<mb<<endl;}

private:
	int ma;
	int mb;
};

class B:private A
{
public:
	B(A & a,int i):A(a){ mc = i;}
	void display_1();

private:
	int mc;
};
void B::display_1()
{
	display();//此处通过A::display()显式调用也可行
	cout<<mc<<endl;
}

int main()
{
	A a2(10,20);
	B *pb = new B(a2,30);
	pb->display_1();
	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值