我在c++中学习多态性,这是我的代码。
class Gun
{
public:
virtual void Shoot()
{
cout<<"BANG";
}
}
class Machinegun:public Gun
{
public:
void Shoot() override
{
cout<<"DRRRRRRRRRRRRRRR";
}
}
int main()
{
Gun *gun;
Machinegun machinegun;
//Why I can't use *gun=&machinegun;??????
//It works when I write Gun *gun=&machinegun;
}这不是一回事*gun=&machinegun<=>*gun=&machinegun;?我看没什么区别,谢谢
发布于 2019-11-22 13:36:48
你似乎混淆了*的两种用法。
Gun * gun这里,*用于定义Gun类型的指针。因为它是在枪的后面。
如果您在已经定义的对象(特别是指针类型)上使用*,就像您的第二个示例一样,它意味着取消引用该指针,返回的是指针所引用的对象,在您的例子中是Gun。枪支对象不能用机关枪*类型赋值
你可能想要的是
Machinegun machinegun;
Gun * gun;
gun = &machinegun;发布于 2019-11-22 13:32:59
在作业的左边和右边使用错误的类型。
*gun=&machinegun;右侧操作数具有Machinegun *类型(即指针类型),而左侧操作数具有Gun类型。
代写
gun = &machinegun;在这种情况下,指向派生类的指针将被隐式转换(重新解释)到基类的指针。
另一种方法是使用引用。例如
Machinegun machinegun;
Gun &gun = machinegun;发布于 2019-11-22 13:53:42
这样的指针
int *名称;
*姓名
时
枪*=&机枪
您尝试将枪指向的值设置为指向机关枪的指针,这会引发错误,因为您不能仅仅将任何值设置为指针
当你做的时候,
枪*枪=&机枪
您正在创建一个指针,并将指针设置为
机枪
你要找的是
枪=&机关枪
这是一个指向机关枪的指针。
下面是我用来检查工作的代码示例
#include <iostream>
using namespace std;
int x = 100; //create number
int* y = &x; //creat pointer and point to number
int main()
{
y = &x; //changing the value of an existing pointer
cout << *y << endl;//printing out the value of number pointed to
}https://stackoverflow.com/questions/58995244
复制相似问题