关于继承成员的访问权限

关于继承成员的访问权限
  1. 派生类继承基类有三种方式:公有继承,私有继承,保护继承。
  2. 以下例子为之前的简单例子,分析以下程序可知:
  3. 当派生类Student公有继承基类Person时:
    ①. 派生类Student继承了基类Person中除构造函数和析构函数以外的所有成员。但是派生类可以直接调用它们吗?答案是并不都可以直接调用,需要看基类中成员的访问权限。
    ②. 在基类Person中,数据成员是私有的,在派生类中并不可以访问到,只能通过有关的成员函数访问;基类中的保护成员函数p,在派生类中可以直接访问到,但出了派生类,即在类外声明的对象是无法直接访问它的,因为它是受到保护的;而基类中的公有成员函数setPerson和print也是可以在派生类中直接访问的,出了派生类后在外声明的对象也可以直接访问。
    ③. 即当继承方式为public时,基类中的private到了派生类中还是private,protected还是protected,public还是public。
  4. 当派生类Student私有继承基类Person时:
    ①. 基类中的公有成员和保护成员被继承下来作为派生类的私有成员,派生类的成员可以直接访问它们;而基类的私有成员被派生类继承下来后,不能直接访问。
    ②. 当继承方式为private时,基类中的private到了派生类还是private,protected变成private,public变成private。
    ③. 所以由此看出当为私有继承的时候,派生类外部声明的对象无法访问基类中所有的成员,基类中的接口全部在派生类中变成私有,也不会在以后的继承中起作用,需要重写一些公有接口来替换基类中已失效的公有接口。因此在实际派生中,一般不采用私有派生方式。
  5. 当派生类Student保护继承基类Person时:
    ①. 基类中的公有成员和保护成员被继承下来作为派生类的保护成员,派生类的成员可以直接访问;而基类中的私有成员被派生类继承下来后,不能直接访问。
    ②. 当继承方式为protected时,基类中的private到了派生类还是private,protected还是protected,public变成protected。
#include <iostream>

using namespace std;

//关于派生类继承的访问权限 

class Person{
	private:
		string name;
		int age;
		char sex;
	protected:
		void p()
		{
			cout<<"基类保护成员"<<endl;
		}
	public:
		void setPerson(string name1,int age1,char sex1)
		{
			name=name1;
			age=age1;
			sex=sex1;
		}
		void print()
		{
			cout<<name<<'\t'<<age<<'\t'<<sex<<endl;
		}
};

class Student:public Person{   
	private:
		string sno; 
		float score;
	public:
		void setStudent(string name1,int age1,char sex1,string sno1,float score1)
		{
			setPerson(name1,age1,sex1);  
			sno=sno1;
			score=score1;
		}
		void print()
		{
			Person::print(); 
			cout<<sno<<'\t'<<score<<endl;
		}
};

int main()
{
	return 0;
} 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值