这要怎么使graduate1既存在默认值又能输入赋值?〈新入门学童求大神解惑〉

【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()