代码如下:
#include <string>
#include <iostream>
using std::string;
using std::cout; using std::cin; using std::endl;
using std::ostream;
class student
{
friend ostream & operator<<(ostream & os, const student &studData);
public:
student() = default;
student(const string &name, int number, double chjA = 0.0, double chjB = 0.0)
:mStrName(name), miNumber(number), mChengjiA(chjA), mChengjiB(chjB)
{}//显式构造函数
student(const student & rStData)//拷贝构造函数
{
if (this != &rStData)
{
mStrName = rStData.mStrName;
miNumber = rStData.miNumber;
mChengjiA = rStData.mChengjiA;
mChengjiB = rStData.mChengjiB;
}
}
double GetAveChengji()const
{
return (mChengjiA + mChengjiB) / 2;
}
public:
private:
string mStrName;
int miNumber = -1;
double mChengjiA = 0.0;
double mChengjiB = 0.0;
};
ostream & operator<<(ostream & os,const student &studData)//流输出操作符重载
{
os << "同学的姓名是:" << studData.mStrName
<< "。他/她的学号是:" << studData.miNumber
<< "。他/她第一科成绩为:" << studData.mChengjiA
<< ";第二科成绩为:" << studData.mChengjiA
<< ",平均成绩为:" << studData.GetAveChengji();
return os;
}
int main()
{
student st ={ "xx", 9989, 89.0, 78.4 };
student st2 = st;
cout << st << endl << st2;
return 0;
}
其实你还可以扩展很多,增加一些get,set等等
