我正在嘗試撰寫適合面向物件編程的 C 代碼。
我有兩個類,即Student和Course。在Student課堂上,我有quiz_scores一個包含 4 個整數的一維陣列。我需要 set 和 get 方法,兩者都以自然通用的方式使用。
在下面,我實作了setQuizScores方法:
void Student :: setQuizScores(int* quizscores){
for(int i = 0; i<4; i ){
quiz_scores[i] = quizscores[i];
}
quizscores我的私人會員在哪里。
現在,接下來我想為Student 類的每個學生回傳這個quiz_scores陣列getQuizScores。
但是,問題是C 不允許我們直接回傳陣列。相反,我希望我的代碼結構如下:
int Student :: getQuizScores(){
Do something;
return the elements of quiz_scores;
}
我怎樣才能有效地做到這一點?
我不喜歡使用標準模板庫 (STL),所以我需要創建自己的陣列并根據上面的解釋訪問它們。
uj5u.com熱心網友回復:
有幾種方法可以回傳陣列:
傳入要復制到的陣列
void Student::getQuizScores(int* out) {
for(int i = 0; i < 4; i )
out[i] = quiz_scores[i];
}
Student student;
int scores[4];
student.getQuizScores(scores);
// use scores[0], etc...
回傳一個包含陣列的結構
struct Scores {
int values[4];
};
Scores Student::getQuizScores() {
Scores s;
for(int i = 0; i < 4; i )
s.values[i] = quiz_scores[i];
return s;
}
Student student;
Scores s = student.getQuizScores();
// use s.values[0], etc...
回傳對類中 quiz_scores 陣列的參考
using Scores = int[4];
Scores const& Student::getQuizScores() const {
return quiz_scores;
}
Student student;
Scores const& scores = student.getQuizScores();
// use scores[0], etc...
uj5u.com熱心網友回復:
正如setQuizScores()能夠獲取指向陣列的指標一樣,也可以getQuizScores()回傳指向quiz_scores成員陣列的指標,例如:
const int* Student::getQuizScores() const {
// do something...
return quiz_scores;
}
然后呼叫者可以根據需要訪問陣列元素,例如:
Student s;
...
const int *scores = s.getQuizScores();
for(int i = 0; i < 4; i){
cout << scores[i] << ' ';
}
或者,由于陣列是固定大小,您可以改為回傳對陣列的參考,例如:
typedef int scoresArr[4];
scoresArr quiz_scores;
...
const scoresArr& Student::getQuizScores() const {
// do something...
return quiz_scores;
}
Student s;
...
const scoresArr &scores = s.getQuizScores();
for(int i = 0; i < 4; i){
cout << scores[i] << ' ';
}
uj5u.com熱心網友回復:
您可以quiz_scores通過getQuizScores如下所示的方法回傳指向陣列的指標:
版本 1:使用尾隨回傳型別
auto getQuizScores() -> int(*)[4]
{
//Do something;
return &quiz_scores;//NOTE THE & INFRONT OF quiz_scores
}
現在您可以使用這個回傳的指標來初始化其他陣列。一個可能的例子是:
#include <iostream>
struct Student
{
int quiz_scores[4]= {1,2,3,4};
//getQuizScores returns a pointer to an array of size 4 with element of type int
auto getQuizScores() -> int(*)[4]
{
//Do something;
return &quiz_scores;//NOTE THE & INFRONT OF quiz_scores
}
void setQuizScores(int* quizscores)
{
for(int i = 0; i<4; i )
{
quiz_scores[i] = quizscores[i];
}
}
};
int main()
{
Student s;
int arr[4];
for(int i = 0; i< 4; i)
{
arr[i] = (*s.getQuizScores())[i];
std::cout<<arr[i]<<std::endl;
}
return 0;
}
版本 2:不使用尾隨回傳型別
int (*getQuizScores())[4]
{
//Do something;
return &quiz_scores;//NOTE THE & INFRONT OF quiz_scores
}
版本 2 與版本 1 相同,只是這次getQuizScores方法不使用試用回傳型別。
還有其他可能性,比如回傳對quiz_scores陣列的參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/363995.html
