本人小白,參考著譚浩強的書寫了一段,大佬們看看這樣行不行
void A::sor(A s[], int n)
{
int i, j, k;
A cc[1] = {
A(0,"0",0)
};
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
if (s[k].sc < s[j].sc)
k = j;
cc[0] = s[k]; s[k] = s[i]; s[i] = cc[0];
}
}
通過一個中間陣列變數cc[0]將自己定義的陣列元素排序行不行
然后在主函式怎樣呼叫這個成員函式
stu[10].sor(stu, 10);
cout << "the sorted array: " << endl;
for (i = 0; i < 10; i++)
stu[i].show();
通過這樣呼叫是可以正確輸出的,但是會出現警告“從“stu”中讀取的資料無效:可讀大小為“360”位元組,但可能讀取了“396”位元組”
還有我感覺這樣呼叫這個sor(A s[],int)函式是不對的,不知道正確的呼叫方式是啥
uj5u.com熱心網友回復:
這樣可以啊,只是不夠美觀而已。uj5u.com熱心網友回復:
那后面出現那個警告是怎么回事啊
uj5u.com熱心網友回復:
貼出你的全部代碼,從這些看不出來uj5u.com熱心網友回復:
#include <iostream>
#include <string>
using namespace std;
class A
{
int num;
string name;
float sc;
public:
A(int, string, float);
void show();
void sor(A s[], int);
};
A::A(int n, string nam, float s)
{
num = n; name = nam; sc = s;
}
void A::show()
{
cout << "nmu-> " << num << " nmae-> " << name << " score-> " << sc << endl;
}
void A::sor(A s[], int n)
{
int i, j, k;
A cc[1] = {
A(0,"0",0)
};
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
if (s[k].sc < s[j].sc)
k = j;
cc[0] = s[k]; s[k] = s[i]; s[i] = cc[0];
}
}
int main()
{
A stu[10] = {
A(1,"sa",80),
A(2,"sb",81),
A(3,"sc",82),
A(4,"sd",83),
A(5,"se",84),
A(6,"sf",85),
A(7,"sg",86),
A(8,"sh",87),
A(9,"si",88),
A(10,"sj",89)
};
int i;
cout << "the original array: "<<endl;
for (i = 0; i < 10; i++)
stu[i].show();
cout << endl;
stu[10].sor(stu, 10);
cout << "the sorted array: " << endl;
for (i = 0; i < 10; i++)
stu[i].show();
system("pause");
return 0;
}
uj5u.com熱心網友回復:
vs2019 編譯沒有問題。沒有什么警告。他的代碼的問題是用c++語言卻摻雜了c的思維方式。。
uj5u.com熱心網友回復:
譚浩強的書,垃圾!扔了吧uj5u.com熱心網友回復:
那要看什么好,譚浩強的快看完了,打算看完他的書就看c++primer 可以嗎
uj5u.com熱心網友回復:
請問c的思維方式指的是什么
uj5u.com熱心網友回復:
c++primer這個都知道了我就不推薦了。譚是真的不懂編程,另外據大家(也包我括本人)分析他的書除了basic以外,基本都不是他自己寫的,估計是他的學生寫。(譚不是搞計算機的,他學生應該也不是)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/181463.html
標籤:新手樂園
