[英]Class accept and return array
我嘗試創建一個接受並返回數組的類,但是遇到了一些問題。 我不確定從類返回數組是否合法。 或者可以通過返回指向數組的指針來完成。 感謝您對問題的任何解決方案。
#include <iostream>
using namespace std;
class myclass {
private:
int Array[10];
public:
myclass (int temp[10]) {
for (int i = 0; i < 10; i++) {
Array [i] = temp [i];
}
}
int returnArray () {
return Array; // error here, I'm not sure if it is legal to return an array.
}
int* returnArray2 () {
return this->Array; // hope it will return a pointer to the array
}
};
int main () {
int Array[10] = {1,2,3,4,5,6,7,8,9};
myclass A(Array);
cout << A.returnArray() << endl; // try to return an array and print it.
myclass* ptr = &A;
cout << *ptr->returnArray2 << endl; // error here
return 0;
}
首先,最好像下面這樣編寫構造函數
myclass ( const int ( &temp )[10] ) {
for (size_t i = 0; i < 10; i++) {
Array [i] = temp [i];
}
}
或喜歡
myclass ( int temp[], size_t n ) : Array {} {
if ( n > 10 ) n = 10;
for (size_t i = 0; i < n; i++) {
Array [i] = temp [i];
}
}
甚至可以定義兩個構造函數。
至於返回值,則可能無法返回數組。 您可以返回對數組的引用,也可以返回指向整個數組的指針,也可以返回指向其第一個元素的指針
例如
int ( &returnArray () )[10] {
return Array;
}
在這種情況下,您可以寫main
for ( int x : A.returnArray() ) std::cout << x << ' ';
std::cout << std::endl;
至於這個說法
cout << *ptr->returnArray2 << endl; // error here
然后您忘記在returnArray2之后放置括號。 寫
cout << *ptr->returnArray2() << endl;
以下成員函數是錯誤的,因為return語句中的表達式的類型為int *
而函數的返回類型為int
int returnArray () {
return Array; // error here, I'm not sure if it is legal to return an array.
}
因此,如果您指定其返回類型(如int *
則該函數將與第二個成員函數重合。 或者您可以將返回表達式更改為*Array
int returnArray () {
return Array; // error here, I'm not sure if it is legal to return an array.
}
這是非法的,因為Array
不是int
類型。 但是,您的returnArray2
有效。 至於這行:
cout << *ptr->returnArray2 << endl; // error here
這是非法的,因為returnArray2
是一個函數 ; 您必須調用它以返回int*
:
cout << *ptr->returnArray2() << endl; // prints the first value in the array
其他說明:
MyClass
並將其成員數組arr_
arr
或arr_
,否則會使很多人arr_
困惑。 return this->Array;
這是多余的,您可以簡單地return Array;
std::vector
和std::array
,則應該研究它們,因為它們通常優於C樣式的數組。 通常,我建議閱讀一本C ++書籍以使您的基礎知識正確,因為發布的代碼中存在很多問題。
關於在類公共API中公開C樣式數組的主要問題,這不是一個非常可靠的機制。 如果由於現有代碼而絕對必要,請執行此操作,但如果可能,則更喜歡使用std :: vector。 您通常總是會得到更好的代碼。
其他答案已經糾正了您的編碼錯誤,因此我不再重復。
另一件事,您的代碼表明數組大小是固定的。 您也可以通過引用傳遞和返回數組。 請參閱: 向/從函數傳遞/返回數組引用(而非指針)的一般規則?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.