26.c/c++程序员面试宝典-访问控制

16.c/c++程序员面试宝典-访问控制

在基类中,public和private标号具有普通含义。用户代码可以访问类的public成员,而不能访问private成员,private成员只能由基类的成员和友元访问。派生类对基类的public和private成员的访问权限与程序中任意其他部分一样。它可以访问public成员而不能访问private成员。有时作为基类的类具有一些成员,它希望派生类访问但仍禁止其他用户访问这些成员。对于这样的成员应使用受保护的访问标号。protected成员可以被派生类对象访问但不能被该类型的普通用户访问。



面试题108  有哪几种继承方式***


分析:继承是面向对象软件技术中核心概念之一。继承是指一个对象直接使用另一个对象的属性和方法。继承可以使子类具有父类的各种属性和方法。继承的主要目的是实现代码的重用。继承的思想在概念上非常简单,但对于如何创建应用程序,以及对于程序设计语言必须支持哪些特性,它的含义非常深远。


继承的方式分为公有继承(public),保护继承(protected)和私有继承(private)3种方式,它们代表了不同的访问权限。3种继承方式的示例代码如下:

class Base

{

public:  //公有的

int a1;

virtual void test()=0;

protected:  //受保护的

int a2;

private:   //私有的

int a3;

}

class ProtectedClass : protected Base  //保护继承

{

public:

void test()

{

a1=1;  //a1在这里被转变为protected

a2=2;  //a2在这里被转变为protected

//a3=3;  //错误派生类不能访问基类的私有成员

}

}

class ControlProtectedClass : public ProtectedClass   //以public方式继承ProtectedClass类

{

public:

void test()

{

a1=1;  //a1在这里仍然保持为public

a2=2;  //a2在这里仍然保持为protected

//a3=3;  //错误,由于Base类成员为私有的,即使是上级,父类是保护继承,也不能改变Base类成员的控制类型

}

}

class PrivateClass : private Base  //私有继承

{

public:

void test()

{

a1=1;  //a1在这里被转换为private

a2=2;  //a2在这里被转换为private

a3=3;  //错误,基类私有成员对文件区域与派生类区域,都是不可访问的

}

}

class ControlPrivateClass : public PrivateClass  //以public方式继承PrivateClass类

{

public:

void test()

{

//a1=1;  //错误,由于基类PrivateClass为私有继承,a1已经转变为Private

//a2=2;  //错误,由于基类PrivateClass为私有继承,a2已经转变为Private

//a3=3;  //错误,由于Base类成员为私有的,PrivateClass类也为私有继承

}

}

class PublicClass : public Base  //公有继承有区别于其他方式的继承,继承后的各成员不会改变其控制方式

{

public:

void test()

{

a1=1;  //a1在这里仍然保持为public

a2=2;  //a2在这里仍然保持为protected

//a3=3;  //错误,派生类不能操作基类的私有成员

}

}

class ControlPublicClass : public PublicClass  //以public方式继承PublicClass类

{

public:

void test()

{

a1=1;  //a1在这里仍然保持为public

a2=2;  //a2在这里仍然保持为protected

//a3=3;  //错误,由于Base类成员为私有的,即使是上级,父类是保护继承,也不能改变Base类成员的控制类型

}

}

int main()

{

system("pause");

}


【答案】继承的方式分为公有继承(public)、保护继承(protected)和私有继承(private)等3种。



面试题109  继承时访问级别任何变化****


分析:在c++中,继承是可以降低父类的访问级别的。

按照访问级别的不同,继承可以分为以下3种。

public(公用继承):基类成员保持自己的访问级别。

protect(受保护继承):基类的public和protected成员在派生类中为protected成员。基类的Private成员保持为Private。

Private(私有继承):基类的所有成员在派生类中为Private成员。


如果没有自定义,c++将使用默认继承保护级别,使用class保留字定义的派生类默认具有Private继承。使用struct保留字定义的类默认具有public继承。友元关系是不可以继承的。static成员属于类,而非对象,在继承层次中只有一个这样的成员。既可以通过基类访问static成员,也可以通过派生类访问。


【答案】在c++中有public、protect和Private等3种继承访问级别。子类继承的时候,通过声明为protect或者Private可以降低父类的访问级别。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值