概述
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可以降低父类的访问级别。
最后
以上就是悦耳蓝天为你收集整理的26.c/c++程序员面试宝典-访问控制的全部内容,希望文章能够帮你解决26.c/c++程序员面试宝典-访问控制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复