CursorMove::CursorMove(char& dir)
{
if(dir == 'd')
{
this->execute = CursorMove::moveRight;
}
else if(dir == 'a')
{
this->execute = CursorMove::moveLeft;
}
else if(dir == 'w')
{
this->execute = CursorMove::moveUp;
}
else if(dir == 's')
{
this->execute = CursorMove::moveDown;
}
}
我目前正在CS项目中工作,我们必须能够使用键盘移动光标。教授希望通过类来完成此操作,因为我们将使用while循环不断检查用户输入,然后只有一个父类,其执行将被调用。每个唯一执行都属于其自己的类。我认为尝试将用于光标移动的命令合并为一个命令可能会更容易。我的想法是使用名为moveRight,moveLeft,moveUp和moveDown的公共静态函数,这些公共函数都具有与execute相同的参数,并在构造期间执行相应的分配。哪个由称为“ dir”的参数确定。
我当前遇到的错误是“必须调用对非静态成员函数的引用”。除了解决错误之外,我更好奇这是否可行,还是我最好不理会它,只为每个人做一个课堂。
答案 0 :(得分:2)
我对这是否可行是一个很好的好奇,还是我最好不理会它,只为每个人上一堂课。
总体计划是可行的。似乎比C ++更像是一种C风格的方法,但是支持该功能。如何使它起作用取决于您的类声明,但是您说您对“如何”不感兴趣(但我会注意到“静态”部分会影响“如何”,而不是可行性)。
不过,您可能想考虑“为什么”。您要做的基本上是创建一个单成员虚拟函数表,类似于如果您声明一个名为execute
的虚拟函数,然后声明派生类以覆盖该函数,则编译器将生成该表。编译器的版本具有一些不错的好处,例如处理dir
不是期望值之一的情况(可能是由于编译时错误)。您希望通过该方法获得什么好处?
答案 1 :(得分:0)
您的代码看起来像这样吗?如果是这样,那么这对我来说很好:
#include <iostream>
using namespace std;
class CursorMove
{
public:
int (*execute)(void);
static int moveLeft();
static int moveRight();
static int moveUp();
static int moveDown();
CursorMove(char& dir);
};
int CursorMove::moveLeft()
{
cout<<"in move left"<<endl;
return 1;
}
int CursorMove::moveRight()
{
cout<<"in move Right"<<endl;
return 1;
}
int CursorMove::moveUp()
{
cout<<"in move Up"<<endl;
return 1;
}
int CursorMove::moveDown()
{
cout<<"in move Down"<<endl;
return 1;
}
CursorMove::CursorMove(char& dir)
{
if(dir == 'd')
{
this->execute = CursorMove::moveRight;
}
else if(dir == 'a')
{
this->execute = CursorMove::moveLeft;
}
else if(dir == 'w')
{
this->execute = CursorMove::moveUp;
}
else if(dir == 's')
{
this->execute = CursorMove::moveDown;
}
}
int main()
{
char dir = 'a';
CursorMove *obj = new CursorMove(dir);
obj->execute();
return 1;
}