C ++在该类的函数中使用类的对象

时间:2013-03-28 05:37:30

标签: c++ oop class constructor

假设我有一个类似的头文件:

# filename: header.h
class myclass
{
 public:
    int myVariable; # arbitrary member variable
    foo(); # arbitrary function
    myclass() # default constructor
}

现在假设我想在一些.cpp文件中实现我的构造函数[myclass()]: 我可以做一些像创建数组,对象,整数,任何东西 - 只是一些数组。 然后我可以循环遍历该数组并在构造函数定义中填充所有内容吗?

我问的原因是因为我希望我的任意成员函数foo()能够更改此数组。这导致了问题 - 我是否将myclass的对象传递给foo [foo(myclass myclassObject)?

或者我将此对象的数组传递给foo()?

对此的任何澄清都将非常感激。我试图尽可能使这个例子对某个案例不具体,但仍然足够描述每个人都能理解这个问题。谢谢!

2 个答案:

答案 0 :(得分:1)

你的构造函数确实可以创建一个数组 - 问题是构造函数返回后该数组会发生什么。

  • 一种合理的方法是将其保存在堆上 - 即使用new[]创建数组 - 但这意味着您需要保留指向数组的指针以便以后访问它。最简单的方法是向类成员数据添加指针对象。然后foo()可以使用该指针访问数组。不幸的是,您必须使用自定义复制构造函数,赋值运算符和析构函数(谷歌规则三)或智能指针,以确保正确复制或共享和销毁数组。

  • 您的问题意味着您不仅需要数组数据成员,这当然是最简单的解决方案。缺点是必须在编译时选择数组大小,而基于堆的数组可以在运行时调整大小。

  • 如果你在堆栈上创建它,那么它将留下范围并且之后无法访问(任何尝试通过指针或引用设置访问它时会在范围内导致未定义的行为)。

  • 构造函数也可以在静态数组中填充数据,但显然数组的生命周期独立于类的任何单个对象实例。你已经谈到了创建数组的构造函数,所以大概不想这样做。

答案 1 :(得分:1)

是的,您可以在构造函数中创建和“填充”数组,以便foo可以使用它。的确,这就是构造函数的目的(为你设置一切)。

请注意,如果您希望foo()能够使用数组,则必须使数组成为类定义的一部分。

<强> myclass.h

class myclass {
    private:
        int* arr; // declared on the "heap"
    public:
        foo();
        myclass(int arraySize);
};

<强> myclass.cpp

#include "myclass.h"
#include <stdio>

myclass::myclass(int arraySize) :arr(new int[arraySize]) {}

myclass::foo() {
    // prints the elements of the array we declared earlier
    for (int i = 0; i < 5; i++) {
        std::cout << arr[i] << std::endl;
    }
}