基类在派生类中访问属性的调整

举报
努力变强的小C 发表于 2022/09/30 17:54:53 2022/09/30
【摘要】 基类在派生类中访问属性的调整

 目录


前言

同名成员的相关知识

访问声明 

数据成员可使用访问声明

访问声明只含没有类型和参数的函数名和变量名

小结



前言

在上一次我们讲解的派生类和析构函数间的构造规则,下面我们将会讲述的是基类成员在派生类中的访问属性的其他方式以及同名函数的概念等等

同名成员的相关知识

在C++中,他是允许在派生类中声明成员是与基类中成员的名字相同,换句话来说,派生类可以重新声明与基类成员中相同名字的成员,但是如果在没有虚函数的情况下,在派生类中定义了乙基类成员同名的成员,那么此时的派生类成员就会覆盖激烈中的同一成员,在派生类中,如果这个名字的使用就意味着访问在派生类中重新声明的成员

下面来展示一个程序片段就可以说明上面的要点了

class A {
public:
	int f();
};
class B :public A {
public:
	int f();
	int g();
};
int B::g() {
	f();
	B::f();		//表示访问派生类中的f(),即调用的函数是B::f();
	return 0;
}

在私有继承的情况之下,为了保证基类中的一部分成员函数在派生类中也是存在的,所以必须要在派生类中重新再次定义同名的成员。在C++面向对象程序设计中,如果要在派生类中对基类所继承过来的东西的某些函数的功能进行,更进一步的扩充和改造都可以通过以上的方式覆盖来实现这种覆盖的方法,这就是对基类成员改造的至关重要的手段,是程序设计中程序员们经常使用的方法之一。

访问声明 

在之前的程序之中,我们已经说过对于公有继承,在基类中的公有成员函数,也就是派生类中的公有成员,函数继承说明外界可以用派生类中的对象来调用基类中原有的公有成员函数,但是对于私有继承在基类中的公用函数就会变成派生类中的私有成员函数,在这个时候,外界就会无法利用派生类中的对象直接对基类中的成员函数来进行调用和访问,而只能通过调用派生类中的成员函数,实现间接的调用基类中的成员函数

数据成员可使用访问声明

class A {
public:
	int a1;
	…
private:
	…
};
class B :private A {
public:
	…
	A::a1;
	…
private:
	…
};


访问声明只含没有类型和参数的函数名和变量名

如果将上面的访问声明写成如下:

void A::show;
或
A::show();
或
void A::show();
都是不对的

小结

1、访问声明是不能够改变成员在所属基类中的访问属性,换句话来说,访问声明只能够将原基类中的保护成员变为私有派生类中的保护成员,但是把原基类中的公有成员变为私有派生类中的公有成员,但是对基类中的私有成员仍不能使用访问声明

2、关于基类中的重载函数名,在访问声明时,将对基类中一切的同名函数都有着作用,这将意味着重载函数在使用访问声明的过程中,一定要非常的谨慎

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。