【问题标题】:declaring object of a class having all virtual functions [closed]声明具有所有虚函数的类的对象
【发布时间】:2014-08-22 22:38:00
【问题描述】:

实际上,这是我的期末考试题。 以下哪项会产生编译时错误?

  1. 在 main 函数的定义中声明具体类的对象。
  2. 在构造函数语句中编写输出语句。
  3. 声明具有至少一个虚函数的类的对象。
  4. 声明具有所有虚函数的类的对象。

我选择了第四个。但还是一头雾水。需要帮助!

【问题讨论】:

  • 嗯...这些都不会导致编译器错误。
  • 期末考试题..答案应该代表您对该主题的了解...而不是您让其他人提供答案的能力。
  • 什么是构造函数语句?
  • 你确定他们写的是“具体”而不是“抽象”吗?
  • 如果您的意思是“纯虚函数”而不是“所有虚函数”,4 是正确的。

标签: c++ oop virtual-functions


【解决方案1】:

有些问题可能会有不同的解释,所以我将在这里总结一下。但是请注意,其中一些解释实际上并不是同义词,而只是我对您的老师可能想说的话的想法。

1.在 main 函数的定义中声明一个具体类的对象。

看到这个问题:What is the difference between a concrete class and an abstract class?。 这表明实例化或声明一个具体类是有效的。 main 函数也不例外。

结论:this is valid.

2。在构造函数语句中写入输出语句。

通过constructor statement,我假设类或结构或类似内容的constructor function 是指。通常,我会说output statement 类似于写入控制台。然而,由于问题使用了一种奇怪的语言,人们可以说output 声明意味着return 声明。

输出,例如写入控制台,在构造函数中是完全合法的。

class Foo
{
public:
    Foo()
    {
        std::cout << "I made a Foo\n";
    }
}

输出,如从函数返回的东西,在构造函数中是不合法的。

class Foo
{
public:
    Foo()
    {
        return 3; // not legal
    }
}

结论:If this is valid or not depends on how you interpret the question.

3.声明具有至少一个虚函数的类的对象。

Virtual functions 类中的解释如下:C++ Virtual/Pure Virtual Explained。 问题很清楚,一个或多个虚函数是not pure virtual,所以:

结论:this is valid.

4.声明具有所有虚函数的类的对象。

有关virtualpure virtual 函数的解释,请参阅我对答案3 的解释。 这个答案的直接解释是:声明一个所有函数都是虚拟的类的对象是否合法?在这种情况下,该语句是有效的,请参见答案 3。

但是,您可以将all virtual functions 解释为pure virtual functions,在这种情况下实例化类是无效的。

结论:If this is valid or not depends on how you interpret the question.

最终结论

答案 1 和 3 都描述了有效的 C++。但是,答案2和4可以有多种解释,所以答案并不明确。

个人想法

我从未听说有人打电话给return statementoutput statement。我也没有听说有人打电话给pure virtual functionall virtual function。我觉得你的老师很奇怪。

【讨论】:

    【解决方案2】:

    四个选项都不是

    1. 在 main 函数的定义中声明具体类的对象。
    2. 在构造函数语句中编写输出语句。
    3. 声明具有至少一个虚函数的类的对象。
    4. 声明具有所有虚函数的类的对象

    必然会产生编译错误。

    如果包含语法错误,它们中的任何一个都会给出编译错误。

    但是,作者所说的“构造函数声明”是什么意思并不清楚,这不是一个标准术语。


    可能作者所说的“所有虚函数”是指“一个或多个纯虚函数”。如果是这样,那么这可能就是预期的答案。

    【讨论】:

      猜你喜欢
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 2014-08-04
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 2023-03-14
      相关资源
      最近更新 更多