c++ - Java程序员——C++人如何使用类?指向类的指针,默认参数?

标签 c++ pointers constructor

我了解面向对象编程,但我习惯了 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/

相关文章:

c++ - 链接 boost - 对 `boost::serialization::singleton_module::get_lock()' 的 undefined reference

c++ - 指针、引用还是智能指针?

C中常量指针的困惑

c++ - 为什么 C++11 大括号初始化与基于堆栈的类层次结构一起工作?

c++ - 在多线程中添加到 vector

c++ - 使用 vector 制作通用堆栈

c++ - 规范运算符重载?

c - 从数组中检索多维数组

Java 类构造函数更改输入参数 - MiniMax

c++ - 在头类构造函数中使用嵌套类