【问题标题】:C++ - Implementation of class methods/voids [closed]C ++ - 类方法/空隙的实现[关闭]
【发布时间】:2012-07-29 15:48:14
【问题描述】:

我目前正在学习用 C++ 创建图形应用程序/游戏的 SDL,并且对如何在类中创建和使用 void 有一些疑问。

对于我当前的项目,我正在创建一个非常基本的乒乓球游戏,并希望创建一个类,它不仅包含有关对象位置、加载的位图和其他变量的信息,而且还包含一个涵盖 AI/运动引擎和另一个用于渲染。

我想对其进行编码,以便我可以像这样格式化我的代码: (以下所有代码均为伪代码,仅代表我想要实现的结构)

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++ 中有什么明显的方法可以做到这一点吗?

【问题讨论】:

  • 该代码存在许多问题,但对于纠正 C++ 来说,这一切都“接近”了。您是否尝试过编译程序?您是否对任何特定的事情感到困惑或困惑?
  • 不太确定问题到底是什么,对我来说似乎是基本的 C++。您有一些语法错误,使您看起来更习惯于 Java。您是否在寻求帮助以修复语法错误?还是更一般的设计问题?
  • 都是伪代码,而且我很惊讶它看起来像 Java,因为我从未在其中编程过 :) 我感到困惑的主要一点是创建 void 的语法这只会改变它的构造函数类的变量,即使 void 中的变量总是相同的,所以如果有 2 个 Object,那么在 object1 上运行该方法不会影响 object2 中的变量,尽管 void 中的变量名被硬编码
  • 您提到“使用空白”。您是在谈论方法的返回类型为 void 吗?
  • 我认为您将函数/方法的返回类型与其语言名称混淆了。不要像说成员函数或方法那样说空洞。

标签: c++ class methods void


【解决方案1】:

我认为您正在寻找构造函数和初始化器列表。您展示的示例中还有许多其他问题,我已对其进行了修复和评论。也许:

#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"; 
  }
}

更像你要找的东西。

【讨论】:

  • 太好了,谢谢!如果我将代码更改为拥有 object1 和 object2 并让 manageStuff() 独立工作,那么现在就像我需要的那样工作^^! :D(不确定您的 IDE/编译器是否允许,但您可以添加 'using namespace::std' 以消除在 cout 等许多函数前面对 std:: 的需要)
  • @TotalJargon 我使用 emacs,我可以输入我喜欢的任何内容,但我通常是deliberately avoid using namespace std;
【解决方案2】:

没有。如果您想使用 C++,则必须实际学习 C++。这至少涉及到学习 C++ 的语法。试图强迫它模仿另一种语言的语法是不可能的或有益的。

【讨论】:

  • 抱歉代码写得不好,有点匆忙,所以我错过了一些愚蠢的事情,比如在 VC# 而不是 C++ 中使用 new
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多