【C++Microsoft Visual Studio 2010】
头文件
#include <iostream>
using namespace std;
#include <string>
class Student
{
private:
int number;
double english,computer;
string name;
static int mycout;
public:
//构造函数
Student(string _name,int _number,double _english,double _computer)
{ name=_name,number=_number,english=_english,computer=_computer,mycout++; }
//析构函数
~Student()
{
cout<<"Student destruct"<<endl;
}
//拷贝构造函数
Student(Student &p);
//设置学生信息
void set(char *getname,int getnumber,double getenglish,double getcomputer);
//计算平均成绩
double Getaverage()
{ return (english+computer)/2; }
/*double Getaverage(double getenglish,double getcomputer)
{
return (english+computer)/2;
}*/
//统计学生人数并输出
void Getcout()
{ cout<<"学生人数:"<<mycout<<endl; }
//输出学生信息
void show();
};
包含函数定义的源文件
#include "student.h"
//定义设置学生信息函数
void Student::set(char *getname,int getnumber,double getenglish,double getcomputer)
{
name=getname;
number=getnumber;
english=getenglish;
computer=getcomputer;
mycout++;
}
//拷贝构造函数定义
Student::Student(Student &p)
{
name=p.name,number=p.number,english=p.english,computer=p.computer;
}
//静态成员初始化,为0
int Student::mycout=0;
int Graduate::gradcout=0;
包含主函数的源文件
1(出现问题,出现了多次定义)
#include "student.h"
int main()
{
//对象初始化
Student stu0("无",0,0,0);
Student stu1("小张",1001,96.00,98.00);
Student stu2("小王",1002,89.00,62.00);
Graduate graduate1("小明",1003,87.00,96.00,"王明"); //定义了一次graduate1
Graduate graduate2(graduate1);
//输入学生相关信息
char myname[20];
int mynumber;
double myenglish,mycomputer;
string myteachAdviser;
cout<<"输入学生姓名:";
cin>>myname;
cout<<"输入学生学号:";
cin>>mynumber;
cout<<"输入学生英语成绩:";
cin>>myenglish;
cout<<"输入学生计算机成绩:";
cin>>mycomputer;
cout<<"输入导师姓名;";
cin>>myteachAdviser;
//自定义学生信息输出
stu0.set(myname,mynumber,myenglish,mycomputer);
stu0.show();
cout<<"平均成绩:"<<stu0.Getaverage()<<endl;
cout<<endl;
Graduate graduate1(myname,mynumber,myenglish,mycomputer,myteachAdviser);
//又定义了一次graduate1
graduate1.setTch("王达");
graduate1.gshow();
cout<<endl;
graduate2.gshow();
cout<<endl;
//信息输出
stu1.show();
cout<<"平均成绩:"<<stu1.Getaverage()<<endl;
cout<<endl;
stu2.show();
cout<<"平均成绩:"<<stu2.Getaverage()<<endl;
cout<<endl;
//人数统计输出
stu1.Getcout();
Graduate::showcoutG();
system("pause");
return 0;
}
2(出现问题:
IntelliSense: 在没有适当 operator() 的情况下调用类类型的对象或将函数转换到指向函数的类型 )
#include "student.h"
int main()
{
//对象初始化
Student stu0("无",0,0,0);
Student stu1("小张",1001,96.00,98.00);
Student stu2("小王",1002,89.00,62.00);
Graduate graduate1("小明",1003,87.00,96.00,"王明"); //graduate1初始化
Graduate graduate2(graduate1);
//输入学生相关信息
char myname[20];
int mynumber;
double myenglish,mycomputer;
string myteachAdviser;
cout<<"输入学生姓名:";
cin>>myname;
cout<<"输入学生学号:";
cin>>mynumber;
cout<<"输入学生英语成绩:";
cin>>myenglish;
cout<<"输入学生计算机成绩:";
cin>>mycomputer;
cout<<"输入导师姓名;";
cin>>myteachAdviser;
//自定义学生信息输出
stu0.set(myname,mynumber,myenglish,mycomputer);
stu0.show();
cout<<"平均成绩:"<<stu0.Getaverage()<<endl;
cout<<endl;
graduate1(myname,mynumber,myenglish,mycomputer,myteachAdviser);
//我想在这把输入的赋给实参,但出了问题 :IntelliSense: 在没有适当 operator() 的情况下调用类类型的对象或将函数转换到指向函数的类型
graduate1.setTch("王达");
graduate1.gshow();
cout<<endl;
graduate2.gshow();
cout<<endl;
//信息输出
stu1.show();
cout<<"平均成绩:"<<stu1.Getaverage()<<endl;
cout<<endl;
stu2.show();
cout<<"平均成绩:"<<stu2.Getaverage()<<endl;
cout<<endl;
//人数统计输出
stu1.Getcout();
Graduate::showcoutG();
system("pause");
return 0;
}
上面两种都不行,我又想使他在可以有默认值得情况下又能输入值进去,这该怎么办??????(我现在只学到继承,还是刚学继承,能用简单些的方法实现吗)
重载函数调用运算符operator()