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

时间:2014-08-22 22:38:01

标签: c++ oop virtual-functions

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

  1. 在main函数的定义中声明具体类的对象。
  2. 在构造函数语句中编写输出语句。
  3. 声明具有至少一个虚函数的类的对象。
  4. 声明具有所有虚函数的类的对象。
  5. 我选择了第4名。但仍然困惑。需要帮助!

2 个答案:

答案 0 :(得分:1)

四个选项中没有一个

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

    如果包含语法错误,则其中任何一个都会出现编译错误,例如。

    然而,目前还不清楚作者所说的“构造函数陈述”是什么意思,这不是一个标准术语。


    可能通过“所有虚函数”,作者意味着“一个或多个纯虚函数”。如果是这样那么那可能是预期的答案。

答案 1 :(得分:1)

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

<强> 1。在main函数的定义中声明具体类的对象。

请参阅此问题:What is the difference between a concrete class and an abstract class?。 这表明实例化或声明具体类是有效的。主要功能对此没有特殊例外。

结论: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。我觉得你的老师很奇怪。