[英]Defining an int array in a class C++
有沒有辦法動態地(我認為這是正確的術語)在一個類中定義一個int數組,該數組的大小是同一類中的私有成員變量? 例如:
class Scene()
{
//public member functions
private:
int max;
int xcoords[max];
}
我在這里搜索了其他已回答的問題,但是我還沒有學會如何在課堂上使用向量,這是大多數回答所建議的。 理想情況下,在類的構造函數中,將傳遞一個int max值,然后使用該值將xcoord數組初始化為max大小,且所有條目均為-1。
如果要動態調整成員數據的大小,幾乎可以肯定必須將其存儲在堆中。 意思是這樣的
class Foo{
int* data;
public:
Foo(int size){
data = new int[size];
}
~Foo(){
// remember to clean up
delete[] data;
}
}
這樣,您的構造函數將在創建類時為堆int
中的size
int
分配大小,並在刪除類時釋放它。
構造函數的更正式的c++
編寫方式是:
Foo(int size):
data(new int[size])
{
}
但最終它將做同樣的事情。
考慮將內存管理留給標准庫。 使用向量代替數組。
#include <vector>
#include <iostream>
using std::vector;
using std::cout;
using std::endl;
class Scene
{
public:
vector<int> verticeData;
};
int LEGACY_FUNCTION(const int * data, int count)
{
for (int i = 0; i < count; ++i)
{
cout << " ";
cout << data[i];
cout << " ";
}
cout << endl;
return 0;
}
int main()
{
Scene myscene;
myscene.verticeData.emplace_back(3);
myscene.verticeData.emplace_back(4);
myscene.verticeData.emplace_back(5);
LEGACY_FUNCTION(myscene.verticeData.data(), myscene.verticeData.size());
myscene.verticeData.clear();
myscene.verticeData.emplace_back(1);
myscene.verticeData.emplace_back(7);
LEGACY_FUNCTION(myscene.verticeData.data(), myscene.verticeData.size());
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.