纯虚函数调用
pure virtual function calling
第一个 printable(e)
给出 "entity" 但对于下一行,程序崩溃了。给一些字符。让我知道错误。
#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);
}
您的 getclassname()
函数没有 return 任何东西,尽管它承诺会这样做。这会导致 未定义的行为 。你不应该打印,而是组成一个字符串:
string getclassname() override
{
return "player";
}
第一个 printable(e)
给出 "entity" 但对于下一行,程序崩溃了。给一些字符。让我知道错误。
#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);
}
您的 getclassname()
函数没有 return 任何东西,尽管它承诺会这样做。这会导致 未定义的行为 。你不应该打印,而是组成一个字符串:
string getclassname() override
{
return "player";
}