我了解面向对象编程,但我习惯了 Java,而且我 直到最近才接触过 C++。
我认为我的问题与其说是句法,不如说是哲学 C++ 中的面向对象编程。我了解指针和地址之间的区别以及 堆栈和堆等等,但我仍然觉得我遗漏了一些东西。
这是一个示例:我有一个包含一些数据的类 (Shape)。我还有一个 类 (App) 使用许多形状。
class Square {
private:
int x;
int y;
int size;
public:
/* constructor */
Square(int x, int y, int size);
}
class App {
private:
Square redSquare;
Square blueSquare;
public:
void setup();
void draw();
}
在某些时候,某些东西会实例化我的应用程序并调用 setup()。问题是,当我声明 App 类(例如,在 App.hpp 中)时,“redSquare”和“blueSquare”被实例化,而不仅仅是声明。作为一名 Java 程序员,我将在本示例中在 setup() 中实例化我的类。但这意味着我不能像上面那样做,我必须将 redSquare 和 blueSquare 设置为 POINTERS,然后我可以在 setup() 中使用 new 创建它们。
但你会这样做吗?或者你会用默认的构造函数 参数,如上创建redSquare和blueSquare,然后设置 App.setup() 中这些方 block 的值,使用类似于 Square.init(x, y, size) 什么的?还是别的什么方式?
你曾经聚合类,还是只聚合指针?
我当然可以用这种或那种方式破解它,所以它可以自己工作,但我有一个 感觉我正在以“Java 方式”做事,而不是 C++ 程序员的想法。
最佳答案
在我看来,问题出在“setup()”方法上。 IIUC,目的是将 App 用作:
App a;
a.setup();
在调用 setup() 之前“a”处于什么状态?如果调用 draw() 会发生什么?如果答案类似于“必须先调用 setup() 才能对 App 对象执行任何有意义的操作”,那么这意味着 setup() 是 App 的“真正”构造函数,而 App 的当前 ctor 是没有意义的。结论:删除“setup()”方法并用有意义的ctor 替换它。
关于c++ - Java程序员——C++人如何使用类?指向类的指针,默认参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/564703/