继承/多态-我是否被迫使用“受保护的”变量?

问题描述 投票:0回答:1

我正在继承一章上使用Code :: Blocks 17.12使用Big C ++ 2nd Edition,]

本书介绍了您希望允许派生类访问该变量的情况的受保护变量类型。

[本书还警告说,受保护的元素会遭受公共变量的某些陷阱:在最坏的情况下,派生类成员可能会破坏基类数据

该书在专用部分中介绍了时钟程序中受保护成员的使用,在该部分中,我们对此进行了介绍,但是在最终代码中,他们最终将变量设置为私有,然后使用一些get_ helper函数来访问该私有成员。数据。这种私有和使用帮助器功能的组合总是在我的IDE中返回错误,而我无法实现这一目标]

以这个简单的示例为P8.1创建的,它是程序员的员工记录,带有员工基类和程序员派生类。我创建了以下ctor,在基类中将变量名和sal设置为protected

状态
Programmer::Programmer(string p_name, double p_sal)
    :Employee(get_name(), get_sal())
{
    name=p_name;
    sal=p_sal;
}

使用此代码,该程序可以正常运行。

基于教科书,如果变量名称和sal在基础中设置为private

状态,那么我应该也能够执行代码,前提是我正在使用创建的get_ helper函数来访问数据。

任何人都可以解释这里的问题吗?我应该使用protected还是可以的,是否真的有办法让我的所有变量对于类都是私有的?

我也在https://docs.microsoft.com/en-us/cpp/cpp/protected-cpp?view=vs-2019上也找到了此>

也被声明为静态的受保护成员可以由派生类的任何朋友或成员函数访问。未声明为静态的受保护成员仅可通过指向派生类的指针,引用或对象来访问派生类中的朋友和成员函数。

到目前为止,我还没有介绍static,所以我最终尝试了使用指针和引用的一堆不同组合,但都不起作用。

我试图基本上了解何时使用受保护与何时使用私有,而这本书还不清楚。有什么想法吗?

我当前正在使用Big C ++ 2nd Edition,使用Code :: Blocks 17.12,在继承一章中,该书介绍了您希望允许使用...的情况下的受保护变量类型。]]

< [
出于某种原因,我认为在调用基类构造函数时,您需要提供帮助器函数来访问私有数据。

由于基本ctor已经是公共的,并且通过向其提供派生类ctor的参数,它将适当地构造派生类obj,允许get_ func读取其私有变量

Programmer::Programmer(string p_name, double p_sal) :Employee(p_name, p_sal) {}

我在书中没有理解这一点,谢谢大家的帮助澄清
c++ class inheritance private protected
1个回答
0
投票
出于某种原因,我认为在调用基类构造函数时,您需要提供帮助器函数来访问私有数据。
© www.soinside.com 2019 - 2024. All rights reserved.