纯虚函数调用
Posted
技术标签:
【中文标题】纯虚函数调用【英文标题】:pure virtual function calling 【发布时间】:2020-04-08 17:44:17 【问题描述】:第一个printable(e)
给出了“实体”,但对于下一行,程序崩溃了。给出一些字符。让我知道错误。
#include<iostream>
using namespace std;
class A
public:
virtual string getclassname() = 0;
;
class entity : public A
public:
string getclassname() override
cout << "entity" << endl;
;
class player : public entity
private:
string m_name2;
public:
player(const string& name2) // Creating a constructor
:m_name2(name2)
string getname()
return m_name2;
public:
string getclassname() override
cout << "player" << endl;
;
void printable(A* en)
cout << en->getclassname() << endl;
int main()
entity* e = new entity();
player* p = new player("bird");
printable(e);
printable(p);
【问题讨论】:
⟼通过采用indentation style 并一致地应用它,这段代码可以受益匪浅。缩进传达了结构和意图,使我们更容易理解您的代码,而无需花费大量时间来破译它。 糟糕:main.cpp:20:5: error: no return statement in function returning non-void [-Werror=return-type]
@FredLarson 刚刚看到了。
此外,建议在A
中定义一个虚拟析构函数,尽管您目前没有使用多态删除。
@FredLarson 我该怎么做。请您详细说明一下。
【参考方案1】:
您的getclassname()
函数不会返回任何内容,即使它承诺会返回。这会导致未定义的行为。您不应该打印,而是编写一个字符串:
string getclassname() override
return "player";
【讨论】:
它有效,但它应该总是有一个“回报”。我不能用cout吗?但是为什么它正在打印实体而不是下一个。谢谢 @AdupaVasista:“返回”和“输出”是不同的东西。cout
将输出到用户的控制台。 return
会将值发送到程序中的调用代码。
@FredLarson。谢谢你。明白了。
为什么打印实体后程序崩溃?任何的想法。谢谢
@AdupaVasista 因为这是像您一样违反语言规则的一种可能结果。你破坏了你的程序。如果你的书没有解释这一点,我会吃掉我的面具以上是关于纯虚函数调用的主要内容,如果未能解决你的问题,请参考以下文章