Stud::Stud(int m, char n, float d) 定義在類外,但類內無對應聲明。static void disp() 中直接用 no、name、deg,編譯錯誤(靜態函數無 this 指針)。char name 只能存單字符,應為 char* name 或 std::string name。static int num 未在構造函數中自增,導致平均分計算分母為 0。#include <iostream>
#include <string>
using namespace std;
class Stud {
private:
int no;
string name; // 用 string 避免手動內存管理
float deg;
static float sum;
static int count; // 重命名避免與 num 衝突
public:
Stud(int m, string n, float d); // 聲明構造函數
static float avg();
static void disp(const Stud* s); // 接收對象指針訪問非靜態成員
};
float Stud::sum = 0.0;
int Stud::count = 0;
Stud::Stud(int m, string n, float d) {
no = m; name = n; deg = d;
sum += deg;
count++;
}
float Stud::avg() {
return count ? sum / count : 0;
}
void Stud::disp(const Stud* s) {
cout << "學號:" << s->no << endl;
cout << "姓名:" << s->name << endl;
cout << "成績:" << s->deg << endl;
cout << "平均分:" << avg() << endl;
}
int main() {
Stud s1(101, "Xiaoming", 84), s2(102, "Xiaohong", 94), s3(103, "Xiaofang", 87);
s1.disp(&s1); s2.disp(&s2); s3.disp(&s3);
return 0;
}
disp 接收 const Stud* 參數模擬 this,訪問實例成員。count 在構造函數中自增,統計實例數量。std::string 替代 char*,安全便捷。此例展示了靜態成員統計全局信息、實例成員保存對象狀態的正確協作模式。