【问题标题】:Interface vs Implementation in C++. What does this mean? [closed]C++ 中的接口与实现。这是什么意思? [关闭]
【发布时间】:2016-12-11 19:27:53
【问题描述】:

我正在学习继承的概念,尤其是关于访问说明符,在这里我对protected 访问说明符感到困惑。 protected 下的成员可以被基类成员函数和派生类成员函数访问。如果我们将protected 声明为访问说明符,则有可能弄乱基类的implementation。在private 下声明数据成员总是比受保护的更好,因为只有interface 被公开,而不是implementation 部分。我们只声明一个类的私有部分中的变量,它如何变成implementation?实施将在member functions 中完成,对吗?术语令人困惑,谁能澄清和解释一下这些术语?

【问题讨论】:

  • 受保护的成员函数可以很好地用于子类可能需要但仍不公开的实用程序类型函数。它们还可以用于由父类调用然后在子类中重写的虚函数,以提供一些特定但仍然不是公共的操作。
  • 这些想法用起来会更清晰。就目前而言,您的问题不是很清楚。
  • @JoachimPileborg 什么是实用型函数?
  • From the Merriam-Webster dictionary:“有用的或设计用于使用的东西”和“设计用于在计算机上执行或促进特别例行操作(如复制文件或编辑文本)的程序或例程”。 IE。常见的类似工具的功能。
  • @KyleReese 你一定很惊讶这么快就收到这么多反对票而没有任何解释。 SOF 是一个非常具体的社区,以简洁和可回答的问题而蓬勃发展。我对您的建议是 1) 了解您问题中的每个术语(谷歌搜索),如果您仍然没有具体问题 2) 将您的问题发布到 quora.com,因为社区有很多宽容度。

标签: c++ inheritance interface protected


【解决方案1】:

接口和实现并不是 C++ 特有的概念,听起来您对接口与实现的区别感到困惑一般而言,因此希望通过解释它们是什么可以更容易理解在 C++ 中。

This SO question(虽然不完全是您要问的)对接口是什么有一个很好的定义:

接口是一个契约:编写接口的人说,“嘿,我接受看起来那样的东西”,而使用接口的人说:“好吧,我写的类看起来像方式”。

接口是一个空壳,只有方法的签名,这意味着方法没有主体。界面什么都做不了。这只是一个模式。

在他的例子中,interface是(翻译成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;
    }
}

实现idea背后的实际内容,interface将如何做我们期望的事情的实际定义。另一个例子:在算法方面,我们谈论深度优先搜索 (DFS),它具有明确定义的行为,但我们如何编码实现,该算法可以各不相同。例如,我们可以使用递归或堆栈数据结构。

现在关于访问说明符:使用protected 访问也不错。我们将继承称为 “is-a” 关系。当我们说Cat 继承自Animal 时,我们也说Cat 是一个 Animal。所以Cat使用Animal的一些实例变量是完全正常的,因为它应该属于Cat

您担心子类所做的某些事情会通过更改实例变量来搞乱超类所做的事情。您当然可以通过从子类中输入无意义的数据来做到这一点,但通常您不会这样做。您使用实例变量作为超类打算使用它们(否则您确实会搞砸功能),这应该记录在案。如果您仍然认为某人真的不应该使用您的实例变量,那么这就是 private 说明符的用途。

最后一件事:覆盖超类方法还应该防止滥用超类变量。通过访问和写入protected 变量,您可能会将超类方法的行为更改为不希望的行为,但随后应覆盖这些方法以执行您的子类打算执行的新操作。

【讨论】:

  • 听起来他对一般的接口和实现感到困惑,所以我想我会回答那部分。我应该将引用的示例更改为 C++ 吗?
  • “我应该将引用的示例更改为 C++ 吗?” 是的,这肯定会更好,其他一切都会让未来的访问者感到困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
相关资源
最近更新 更多