在类的函数中使用类的对象
C++ Using an object of a class within a function of that class
假设我有一个头文件,看起来像:
# filename: header.h
class myclass
{
public:
int myVariable; # arbitrary member variable
foo(); # arbitrary function
myclass() # default constructor
}
现在假设我想在一些。cpp文件中实现我的构造函数[myclass()]:我能不能创建一个数组,对象的数组,整型的数组等等,就一个数组。然后我可以循环遍历数组并在构造函数定义中填充吗?
我问的原因是因为我希望我的任意成员函数foo()能够改变这个数组。这就导致了问题-我是否将myclass的对象传递给foo [foo(myclass myclasssobject) ?
或者我把这个对象的数组传递给foo() ?
对此的任何澄清将不胜感激。我尽量让这个例子不针对特定情况,但仍然具有足够的描述性,以便每个人都能理解这个问题。谢谢你!
是的,您可以在构造函数中创建和"填充"数组,以便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;
}
}
你的构造函数确实可以创建一个数组——问题是在构造函数返回后数组发生了什么。
-
一种合理的方法是将其保存在堆上-即使用
new[]
创建数组-但这意味着您需要保持指向数组的指针以便之后访问它。最简单的方法是向类成员数据添加一个指针对象。然后foo()
可以使用该指针访问数组。不幸的是,你必须使用自定义复制构造函数、赋值操作符和析构函数(google规则三)或智能指针来确保数组的正确复制、共享和销毁。 -
你的问题暗示我,你不只是想要一个数组数据成员,这当然是最简单的解决方案。这样做的缺点是数组大小必须在编译时选择,而基于堆的数组可以在运行时确定大小。
-
如果你在堆栈上创建它,那么它将离开作用域并且之后不可访问(当它在作用域内时,任何通过指针或引用设置访问它的尝试都会导致未定义的行为)。
-
构造函数也可以在静态数组中填充数据,但显然数组的生命周期独立于类的任何单个对象实例。你已经讨论过构造函数创建数组,所以大概不想这样做。
- 如何创建对象函数指针C++映射?
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 如何将对象函数的实例传递给另一个函数
- 调用模板函数的问题"No matching function for call"参数:迭代器、对象函数
- makefile对我的名称空间对象/函数/构造函数的不确定引用
- 将对象函数转换为函数指针
- 非对象函数/类函数C++
- 线程对象函数 C++
- C 将成员对象函数分配给类成员功能
- 使用基本指针调用派生对象函数
- 可以(通过编译器)使用多少个线程来初始化全局对象(函数main之前)
- C++类对象函数
- 对对象::函数的未定义引用
- 无法弄清楚将多个对象函数作为单独的线程调用的语法
- 在提升作用域出口中调用对象函数
- 使用基指针来使用派生对象函数
- 在for_each lambda 中调用对象函数
- C++:: 模板函数 - 从对象函数获取对象的地址
- Qt5 未解析的外部静态元对象函数
- 通过变量使用对象和对象函数