在使用虚拟函数(C++)时遇到问题
Having trouble with virtual functions(C++)
所以我做了一个简单的程序:
#include <iostream>
using namespace std;
class Enemy{
public:
virtual void attack(){}
int attackPower;
void setAttackPower(int a)
{
attackPower = a;
}
};
class Ninja: public Enemy{
public:
void attack(){
cout<<"ninja "<< attackPower<<endl;
}
};
class Monster: public Enemy{
public:
void attack(){
cout<<"monster "<< attackPower<<endl;
}
};
int main()
{
Ninja n;
Monster m;
Enemy *enemy1= &n;
Enemy *enemy2 = &m;
enemy1->attack();
enemy2->attack();
enemy1->setAttackPower(29);
enemy2->setAttackPower(99);
return 0;
}
我遇到的问题是,当我打印出类似enemy1的攻击力时,它并不是我设定的,29,这是一个巨大的数字。所以我想知道的是,为什么这个数字会出现巨大的数字,我该如何解决?
首先通过初始化附加电源
enemy1->setAttackPower(29);
enemy2->setAttackPower(99);
然后打印,
enemy1->attack();
enemy2->attack();
main
就像
int main()
{
Ninja n;
Monster m;
Enemy *enemy1= &n;
Enemy *enemy2 = &m;
enemy1->setAttackPower(29); // set the attack power first
enemy2->setAttackPower(99);
enemy1->attack(); // then print it otherwise junk values will be printed
enemy2->attack();
return 0;
}
您在setAttackPower()
之前调用了attack()
。因为没有初始化m
或n
,所以它们具有垃圾值。
我已经很久没有写任何C++了,但我做了以下代码:
void attack(){
cout<<"monster "<< attackPower<<endl;
}
还需要虚拟关键字:
virtual void attack(){
cout<<"monster "<< attackPower<<endl;
}
相关文章:
- 编译包含字符串的代码时遇到问题
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 从其他类访问类时遇到问题
- 使用静态成员声明类时遇到问题
- C++ 填充数组时遇到问题
- 在将字符串放入字符串向量时遇到问题?
- 余数除法和不允许除以零 (c++) 时遇到问题
- 我在C++中使用 getline() 函数时遇到问题
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 在我的四叉树实现中遇到问题
- 在 c++ 中循环遍历数组时遇到问题
- 使用 MinGW 在 Windows 上构建 GLEW 时遇到问题
- 编译 Cilk Plus 程序时遇到问题
- 存储另一个函数返回的布尔数组时遇到问题
- 我在 OpenGL 中显示图像时遇到问题
- 我在解决此错误时遇到问题.我正在努力在主函数中传递数组
- 在 for 循环中更新两个变量时遇到问题C++
- 为什么我的程序在打开网络设备时遇到问题
- 在 Tensorflow C++ 中使用 FIFOQueue 时遇到问题
- 为什么我在虚幻引擎中的多态性和接口方面遇到问题?