#include<string> //字符串类使用
using namespace std;
//读者类Reader分为教师,学生,在职研究生三种类型,其中教师可以借书的最大册数为16本,借期最长为270天;
//学生可以借书的最大册数为10本,借期最长为180天。
/*第一组:
1.增加基类Reader的计算超期罚款函数。
2.用基类Reader的指针数组来处理不同派生类对象,从而实现多态性调用。
*/
#define MAX
class Reader
{ public :
Reader()
{
cout<<"请输入姓名,性别,编号,借书日期年月日,借书数:"<<endl;
cout<<"(教师可以借书的最大册数为16本,借期最长为270天;学生可以借书的最大册数为10本.)"<<endl;
cin>>name>>sex>>number>>n>>y>>r>>s;
}
virtual void Return();
void show()
{
cout<<"姓名:"<<name<<endl;
cout<<"性别:"<<sex<<endl;
cout<<"编号:"<<number<<endl;
cout<<"借书日期:"<<n<<"年"<<y<<"月"<<r<<"日"<<endl;
cout<<"借书数:"<<s<<endl;
}
protected:
string name; //姓名
string sex; //性别
string number; //编号
int n,y,r,s; //年 月 日 借书数
};
////////声明Rstudent公有继承Reader
class Rstudent:virtual public Reader
{
public:
Rstudent():Reader()
{
cout<<"请输入专业"<<endl;
cin>>major;
++count_s;
}
void Return()
{ int N,Y,R,S,F;
cout<<"请输入还书时间(年月日)及还书数"<<endl;
cin>>N>>Y>>R>>S;
F=0.5*((N-n)*365+(Y-y)*30+(R-r));
cout<<endl<<"你需要交的罚款金额为"<<F;
s=s-S;
}
void show()
{
Reader::show();
cout<<"专业:"<<major<<endl;
cout<<"学生读者借期最长为180天"<<endl;
}
void show_count()
{
cout<<"学生读者已有"<<count_s;
}
protected:
string major;
private:
static int count_s;
};
////////声明Rteacher公有继承Reader
class Rteacher:virtual public Reader
{
public:
Rteacher():Reader()
{
cout<<"请输入职位"<<endl;
cin>>job;
++count_t;
}
void Return()
{ int N,Y,R,S,F;
cout<<"请输入还书时间(年月日)及还书数"<<endl;
cin>>N>>Y>>R>>S;
F=1*((N-n)*365+(Y-y)*30+(R-r));
cout<<endl<<"你需要交的罚款金额为"<<F;
s=s-S;
}
void show()
{
Reader::show();
cout<<"职位:"<<job<<endl;
cout<<"教师读者最长借期为270天"<<endl;
}
void show_count()
{
cout<<"教师读者已有"<<count_t;
}
protected:
string job;
private:
static int count_t;
};
////////声明Gct公有继承Rstudent
class Gct:public Rstudent,public Rteacher
{
public:
Gct():Reader(),Rstudent(),Rteacher()
{
++count_G;
}
void Return()
{ int N,Y,R,S,F;
cout<<"请输入还书时间(年月日)及还书数"<<endl;
cin>>N>>Y>>R>>S;
F=2*((N-n)*365+(Y-y)*30+(R-r));
cout<<endl<<"你需要交的罚款金额为"<<F;
s=s-S;
}
void show()
{
Rstudent::show();
cout<<endl<<"职位:"<<job<<endl;
}
void show_count()
{
cout<<"研究生读者已有"<<count_G;
}
private:
static int count_G;
};
int Rstudent::count_s=0;
int Rteacher::count_t=0;
int Gct::count_G=0;
int main() //主函数
{
Rstudent S1;
Rteacher T1;
Gct G1;
S1.show();
S1.show_count();
cout<<endl;
T1.show();
T1.show_count();
cout<<endl;
G1.show();
G1.show_count();
return 0;
}
6 个解决方案
#1
主函数还没完善,没用到指针,就想着前面的代码弄好。
#2
--------------------Configuration: 1 - Win32 Debug--------------------
Linking...
1.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Reader::Return(void)" (?Return@Reader@@UAEXXZ)
Debug/1.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
1.exe - 1 error(s), 0 warning(s)
Linking...
1.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Reader::Return(void)" (?Return@Reader@@UAEXXZ)
Debug/1.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
1.exe - 1 error(s), 0 warning(s)
#3
virtual void Return() = 0;
你不实现,就要声明它是抽象的
#4
第一次见到这种类派生法的.... virtual是用来修饰虚函数的,不是用来派生类继承的。
------- Quote -------
////////声明Rteacher公有继承Reader
class Rteacher:virtual public Reader
{
------- Quote -------
////////声明Rteacher公有继承Reader
class Rteacher:virtual public Reader
{
#5
你别说LZ,那是你自身问题,请搜索“C++ 虚继承”
#6
默默地翻开了 C++ Primer 第4版,果然看到了虚继承..... 呵,学艺不精啊。还是3楼比较厉害
#1
主函数还没完善,没用到指针,就想着前面的代码弄好。
#2
--------------------Configuration: 1 - Win32 Debug--------------------
Linking...
1.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Reader::Return(void)" (?Return@Reader@@UAEXXZ)
Debug/1.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
1.exe - 1 error(s), 0 warning(s)
Linking...
1.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Reader::Return(void)" (?Return@Reader@@UAEXXZ)
Debug/1.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
1.exe - 1 error(s), 0 warning(s)
#3
virtual void Return() = 0;
你不实现,就要声明它是抽象的
#4
第一次见到这种类派生法的.... virtual是用来修饰虚函数的,不是用来派生类继承的。
------- Quote -------
////////声明Rteacher公有继承Reader
class Rteacher:virtual public Reader
{
------- Quote -------
////////声明Rteacher公有继承Reader
class Rteacher:virtual public Reader
{
#5
第一次见到这种类派生法的.... virtual是用来修饰虚函数的,不是用来派生类继承的。
------- Quote -------
////////声明Rteacher公有继承Reader
class Rteacher:virtual public Reader
{
你别说LZ,那是你自身问题,请搜索“C++ 虚继承”
#6
第一次见到这种类派生法的.... virtual是用来修饰虚函数的,不是用来派生类继承的。
------- Quote -------
////////声明Rteacher公有继承Reader
class Rteacher:virtual public Reader
{
你别说LZ,那是你自身问题,请搜索“C++ 虚继承”
默默地翻开了 C++ Primer 第4版,果然看到了虚继承..... 呵,学艺不精啊。还是3楼比较厉害