【发布时间】:2019-03-31 18:02:55
【问题描述】:
我开始学习 C++ 并且来自 C# 背景,我遇到了很多问题。
我想要做的是尝试使用 C++ 复制我在以下 C# sn-p 中所做的完全相同的事情。这只是 MVP 模式的一个简单实现,我经常使用它。
我尝试了许多不同的方法来使用正确和现代的 C++ 进行这项工作,但它不断给我带来我无法正确理解的编译错误。其中大多数是由于我无法找到正确的方法将接口作为构造函数参数传递,也无法将接口存储为类的字段。 有人可以将此 C# 代码翻译成正确的 C++ 代码,或者至少给我一些建议吗?提前致谢。
注意:我正在尝试制作只有类声明的头文件和实际实现的 cpp 文件。
// This is my C# implementation that I want to convert in C++
public class Program
{
public static void Main()
{
IGameView view = new GameView();
Game game = new Game(view);
view.SetPresenter(game);
}
}
public interface IGameView
{
void SetPresenter(Game game);
}
public class GameView : IGameView
{
public void SetPresenter(Game game)
{
_game = game;
}
Game _game;
}
public class Game
{
public Game(IGameView view)
{
_view = view;
}
IGameView _view;
}
这是我试图编译的 C++ 代码。 为了清晰和简洁,我把所有的东西都放在这里,没有 .h 和 .cpp,但正如我所说,我实际上是在将类与实现分开。
class Game
{
public:
(IGameView& view) : _view(view)
{ }
Game operator=(const Game &);
private:
IGameView& _view;
};
class IGameView
{
public:
virtual ~IGameView() {}
virtual void SetPresenter(const Game) = 0;
};
class GameView : public IGameView
{
public:
GameView();
void SetPresenter(const Game game) override
{
_game = game;
}
private:
Game& _game;
};
int main()
{
IGameView view;
Game game(view);
view.SetPresenter(game);
}
【问题讨论】:
-
如果您刚开始使用 C++,那么最好的做法是尝试忽略您对 C# 的大部分了解,而不是尝试将 C# 代码转换为 C++。首先学习 C++(不要将其与 C# 进行比较和关联),只有在您拥有足够的 C++ 经验和扎实的基础后,您才可以尝试将 C# 程序翻译成 C++。尽管语言结构的语法有相似之处,但两种环境都有很大的不同,因此对于 C++ 初学者来说,尝试将 C# 代码转换为 C++ 代码确实没有多大意义。
-
C# 和 C++ 之间存在一些显着差异,尤其是在这部分。教程很多,一些关键词:继承、虚函数和纯虚函数。如果您使用这些关键字查询 Google,您肯定会找到一些可以解释为什么您的代码无法正常工作的内容。提示:多态性迫使您在几乎所有情况下都使用指针。