簡體   English   中英

類接受並返回數組

[英]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_ arrarr_ ,否則會使很多人arr_困惑。
  • return this->Array; 這是多余的,您可以簡單地return Array;
  • 如果您還沒有聽說過std::vectorstd::array ,則應該研究它們,因為它們通常優於C樣式的數組。

通常,我建議閱讀一本C ++書籍以使您的基礎知識正確,因為發布的代碼中存在很多問題。

關於在類公共API中公開C樣式數組的主要問題,這不是一個非常可靠的機制。 如果由於現有代碼而絕對必要,請執行此操作,但如果可能,則更喜歡使用std :: vector。 您通常總是會得到更好的代碼。

其他答案已經糾正了您的編碼錯誤,因此我不再重復。

另一件事,您的代碼表明數組大小是固定的。 您也可以通過引用傳遞和返回數組。 請參閱: 向/從函數傳遞/返回數組引用(而非指針)的一般規則?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM