C++继承与派生访问权限

观察下边一段代码:

class A{
	public:
		void f1(){}
		int i;
	protected:
		void f2(){}
		int j;
	private:
		int k;
};
class B:public A{
	public:
		void f3(){}
	protected:	
		int m;
	private:
		int n;
};
class C:public B{
	public:
		void f4(){}
	private:
		int p;
};

全是公用继承,思考这样几个问题:

1.在main函数中能否用b1.i,b1.j和b1.k引用派生类B对象b1中基类A的成员

2.派生类B中成员函数能否调用基类中的成员函数f1和f2.

3.派生类B中成员函数能否调用基类中的数据成员i,j,k.

4.能否在main函数中用c1.i,c1.j,c1.k,c1.m.cl.n,c1.p引用基类A的成员i,j,k,派生类B的成员m,n以及派生类C的成员p

5.能否在main函数中用c1.f1(),c1.f2(),c1.f3()和c1.f4()调用f1,f2,f3,f4c成员函数.

6.派生类C的成员函数f4能否调用基类A中的成员函数f1,f2和派生类中的成员函数f3.

答案在代码中,思考几分钟再看.


#include<bits/stdc++.h>

using namespace std;

class A {
	public:
		void f1(){}//空函数得写括号 
		int i;
	protected:
		void f2(){}//空函数得写括号 
		int j;
	private:
		int k;
};
class B:public A {
	public:
		void f3() {
			//f1();
//			f2();f1在B类中是公有,f2是保护,可以直接在其派生类中调用
//		 	i = 1;//可以
//			 j = 1;//可以
//			 k = 1;	//可以
		}
	protected:
		int m;
	private:
		int n;
};
class C:public B {
	public:
		void f4(){
			f1();//可以 
			f2();//可以 
		}
	private:
		int p;
};

int main() {
	A a1;
	B b1;
	C c1;
	b1.i; //可以访问;
	//b1.j; //不可以访问,j是由通过公有继承基类来的,j在 基类中的权限是保护,在派生类中也是保护,类外不能访问被保护的数据成员。
	//b1.k;//k同理;
	// c1.j;  //不可以
//	c1.f1();//可以 
	c1.f3();//可以 
	c1.f4();//可以 
//	c1.f2(); //不可以f2是保护成员 
	c1.i;//可以
//	c1.j;//不可以 
//	c1.k;//不可以 
//	c1.n;//不可以 
//	c1.m; //不可以 
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值