我正在学习继承的概念,特别是关于访问说明符,在这里我对protected
访问说明符感到困惑。被保护的成员可以被基类成员函数和派生类成员函数访问。如果我们声明protected为访问说明符,则可能会搞乱基类的implementation
。它总是更好地申报private
下的数据成员,而不是保护,因为只有interface
公开,而不是implementation
部分。我们只声明一个类的私有部分中的变量以及它如何变成implementation
?实施将在member functions
完成吗?条款很混乱,任何人都可以澄清并解释我的条款?C++中的接口与实现。这是什么意思?
回答
接口和实现并不是特定于C++的想法,它听起来像是对什么接口和实现是一般感到困惑,所以希望通过解释它们是什么将会更容易在C++中理解它。
This SO question(虽然不完全是你问)有一个接口是什么一个很好的定义:
接口是合同:这家伙写的接口说,“哎,我接受这样看待的东西“,而使用界面的人说:”好吧,我写的课程就是这样看的“。
一个接口是一个空壳,只有方法的签名,这意味着方法没有一个主体。界面不能做任何事情。这只是一种模式。
而在他的实施例的接口被(翻译成C++):
class MotorVehicle
{
public:
virtual void run() const = 0;
virtual int getFuel() const = 0;
}
然后是实施是:
class Car : public MotorVehicle
{
int fuel;
public:
void run() const override
{
printf("Wrroooooooom\n");
}
int getFuel() const override
{
return this->fuel;
}
}
的实施是实际想法背后的物质 ,接口的实际定义将如我们所期望的那样。另一个例子:就算法而言,我们讨论的是深度优先搜索(DFS),它具有明确定义的行为,但我们如何代码或实现,算法可以变化。例如,我们可以使用递归或堆栈数据结构。
现在作为访问说明符:使用protected
访问不错。我们将继承作为一个“is-a”的关系来讨论。当我们说Cat
继承自Animal
时,我们也说Cat
是Animal
。所以对于Cat
来说使用Animal
的一些实例变量是完全正常的,因为应该无论如何都属于Cat
。
你担心子类会通过改变实例变量来搞乱超类的功能。你当然可以通过从子类中抛出无意义的数据来做到这一点,但通常你不这样做。你可以使用实例变量作为他们想要使用的超类(否则你确实会搞砸功能),这应该被记录下来。如果您仍然认为有人不应该使用您的实例变量,那么这就是private
说明符的用途。
最后一件事:重写超类方法还应该防止滥用超类变量。通过访问和写入protected
变量,您可能会将超类方法的行为更改为不希望的东西,但是应该重写这些方法以执行您的子类打算执行的新操作。
听起来他对一般的界面和实现有些困惑,所以我想我会回答这个问题。我应该将引用的示例更改为C++吗? –
_“我应该将引用的示例更改为C++吗?”_是的,这样会更好,其他所有内容都会让未来的访问者感到困惑。 –
- 1. 实现是什么意思?
- 2. 这是什么意思? [c#]
- 3. 这是什么意思-c
- 4. 这是什么意思 - C#
- 5. “程序接口,不是实现”是什么意思?
- 6. C中的shellcode - 这是什么意思?
- 7. 这是什么打字稿接口语法是什么意思?
- 8. 这个接口定义中的尖括号是什么意思?
- 9. Java的实现是什么意思?
- 10. 这是什么C++代码的意思
- 11. JRuby是在JVM上实现的Ruby--这是什么意思?
- 12. C中##是什么意思?
- 13. 这个链接是什么意思?
- 14. 这是什么意思在Objective-C
- 15. 这个C宏是什么意思?
- 16. 这个C++语法是什么意思?
- 17. 这个C#声明是什么意思?
- 18. 这个C++代码是什么意思
- 19. 这是什么意思在C++
- 20. 这个C代码是什么意思?
- 21. C++,这个语法是什么意思?
- 22. C struct:这是什么意思?
- 23. C++ Biginteger,这是什么意思?
- 24. 这个C++函数是什么意思?
- 25. %* c in scanf() - 这是什么意思?
- 26. 这个C++代码是什么意思?
- 27. 这些C#代码是什么意思?
- 28. 这个C宏是什么意思?
- 29. 这个C++语句是什么意思?
- 30. 这个C习语是什么意思?
提供评论atleast而不是down-voting: -/ –
受保护的成员函数可能适用于子类可能需要的实用类型函数,但仍然不公开。它们也可以用于父类调用的虚函数,然后在子类中重写,以提供一些特定但尚未公开的操作。 –
如果你使用它们,这些想法会变得更加清晰。现在你的问题不是很清楚。 – doctorlove