2012-07-29 79 views
0

我目前正在学习SDL,用于在C++中创建图形应用程序/游戏,并且有几个关于如何在类中创建和使用空白的问题。C++ - 实现类方法/空洞

对于我目前的项目,我创建了一个非常基本的pong游戏,并且希望创建一个不仅包含关于对象位置,加载的位图和其他变量的信息的类,还包含一个涵盖AI/Movement Engine另一个用于渲染。

我想代码,以便我能格式化我这样的代码: (下面的所有代码是伪代码,仅代表什么,我要实现的结构)

class Object 
{ 
    private int stuff; 
    private void manageStuff(); 
} 

void Object::manageStuff() 
{ 
    stuff++; 
} 

Object object = new Object(); 

object.stuff = 0; 

for (int i = 0; i < 10, i++) 
{ 
    object.manageStuff(); 
    cout << object.stuff; 
} 

是否有任何在C++中这样做的明显方法?

+0

该代码存在许多问题,但它对于正确的C++来说都“接近”。你有没有试过编译一个程序?你是被任何特定的东西卡住还是困惑? – aschepler 2012-07-29 15:50:52

+0

真的不知道问题是什么,看起来像基本的C++对我来说。你有一些语法错误,使你看起来更习惯Java。你是否在寻求帮助来解决语法错误?或者是一个更一般的设计问题? – jahhaj 2012-07-29 15:51:57

+0

这是所有的伪代码,我也很惊讶,它看起来像Java看到,因为我从来没有编程它:)我混淆的主要位是创建一个空的语法,只会改变变量它是构造函数类,即使void中的变量总是相同的,所以如果有2个Object,那么在object1上运行该方法将不会影响object2中的变量,尽管void中的变量名是硬编码的 – TotalJargon 2012-07-29 15:54:07

回答

0

我想你正在寻找构造函数和initalizer列表。在你展示的例子中还有一些其他问题,我已经解决并且已经发表了评论。也许:

#include <iostream> 

class Object 
{ 
// Note: access modifier written like this: 
public: 
    int stuff; 
    void manageStuff(); 
    Object(); // Constructor which takes no arguments 
}; // note semicolon 

void Object::manageStuff() 
{ 
    stuff++; 
} 

Object::Object() : stuff(0) { 
    // sets stuff to 0 upon initalization. 
    // could also have written: 
    // stuff=0; 
    // but in this case initalization is nicer. 
} 

Object object; // no need for new here 

// initial value of stuff set via constructor now, 
// you can't just write random statements anywhere 

int main() { 
    for (int i = 0; i < 10; i++) // note semicolon not comma 
    { 
     // if these were private this would fail: 
     object.manageStuff(); 
     std::cout << object.stuff << "\n"; 
    } 
} 

更像是你在找什么。

+0

非常感谢你!正如我所需要的那样工作^^现在如果我改变该代码以拥有object1和object2并让manageStuff()独立工作! :D(不知道你的IDE/Comiler是否允许,但你可以添加'using namespace :: std'来删除诸如cout之类的许多函数前面对std ::的需求) – TotalJargon 2012-07-29 16:06:20

+0

@TotalJargon我使用emacs,我可以输入任何像,但我通常[故意避免'使用名称空间标准;'](http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-a-bad-practice-in-c) – Flexo 2012-07-29 16:08:24

0

不可以。如果你想使用C++,你将不得不真正学习C++。这至少涉及到学习C++的语法。试图强制它模仿另一种语言的语法不会是可能的或有益的。

+0

对不起,代码写得不好,有点匆忙,所以我错过了一些愚蠢的东西,比如新的在VC中使用#而不是C++ – TotalJargon 2012-07-29 16:11:54