C++虚函数virtual function
来源:互联网 发布:lync for mac 2016 编辑:程序博客网 时间:2024/05/16 12:28
这是为女友总结的,女友的专业是网络工程;只是,到目前为止,我遇到的女生在编程敲代码方面的强人,真的是少之又少!这里所遇到的问题详细描述大致如下:
写一个People类,包含构造函数,输入、输出信息函数,数据成员有姓名、编号(可以理解成学号或身份证号吧,我选择的是学号,且为int型)、性别;
一个Studnet类,继承自People类,增加新的数据成员学生成绩;一个Teacher类,继承自People类,只增加新的数据成员教师的教龄。
还有,我一直很诧异为什么现在还有大学在选择C++ IDE的时候还是用Visual C++6.0,不知道Visual C++6.0对C++标准的支持实在是太差了;Visual C++ 6.0可是
十几年前的东西呀!所以下面我所贴的代码在VC++6.0中肯定是无法编译通过的。可以选择IDE的是code::blocks10.05、mingw developer studio或是visual studio 2010等!
包含mylove.h头文件(头文件内容如下),在主函数中调用函数void Test(void)即可,或者将void Test(void)改成主函数即可!
#ifndef MYLOVE_H_INCLUDED#define MYLOVE_H_INCLUDED#include <iostream>#include <string>///class People/class People{public: People(string nam = "null",int num = 0,string se = "null"): name(nam),number(num),sex(se) {}//constructed function virtual void InputMseeages(string nam,int num,string se){ name = nam,number = num,sex = se; }//input messages method virtual void OutputMessages() const{ cout<<"Name:"<<name<<" Number:"<<number<<" Sex:"<<sex<<endl; }//output messages methodprotected: string name; //name int number; //number string sex; //sex};///end class People///class Student/class Student : public People{public: Student(string nam = "null",int num = 0,string se = "null",double gra = 0): People(nam,num,se),grade(gra) {}//constructed function void InputMseeages(string nam,int num,string se,double gra){ name = nam,number = num,sex = se,grade = gra; }//input messages method void OutputMessages() const{ cout<<"Name:"<<name<<" Number:"<<number<<" Sex:"<<sex<<" Grade:"<<grade<<endl; }//output messages methodprivate: double grade;};///end class Student///class Teacher/class Teacher : public People{public: Teacher(string nam = "null",int num = 0,string se = "null",int yea = 0): People(nam,num,se),year(yea) {}//constructed function void InputMseeages(string nam,int num,string se,int yea){ name = nam,number = num,sex = se,year = yea; }//input messages method void OutputMessages() const{ cout<<"Name:"<<name<<" Number:"<<number<<" Sex:"<<sex<<" Year:"<<year<<endl; }//output messages methodprivate: int year;};///end class Teacher/** *main function--Only test-- */void Test(void){ cout<<"class People:"<<endl; People P("JiangTing",2145,"girl"); P.OutputMessages(); P.InputMseeages("LiYang",2140,"boy"); P.OutputMessages(); cout<<"class Student:"<<endl; Student S("JiangTing",2145,"girl",0); S.OutputMessages(); S.InputMseeages("LiYang",2140,"boy",100); S.OutputMessages(); cout<<"class Teacher:"<<endl; Teacher T("JiangTing",2145,"girl",0); T.OutputMessages(); T.InputMseeages("LiYang",2140,"boy",0); T.OutputMessages();}//end test#endif // MYLOVE_H_INCLUDED
效果图:如下
其实,我也有过类似的题目,不过要比前面的复杂多了,具体信息如下:
实验题目(共2题, 第1题)
1.设计Person类。保护成员:姓名string Name; 公有成员函数:void Print(); 构造函数。
2.从Person类派生Student类。保护成员:学号int Number;公有成员函数:void Print(); 构造函数。
3.从 Person类派生 Teacher类。保护成员:教龄int Year;公有成员函数:void Print();构造函数。
4.从Student类派生Graduate类。保护成员:研究方向string Research;公有成员函数:void Print();构造函数。
在主程序中定义一个Person类的对象指针数组,长度由用户输入。而后,用户依次输入对象信息(对象类别及其包含的成员)。全部录入后,由用户输入要显示的对象信息在数组中的位置,并在屏幕上打印,如果用户输入”exit”则退出。
输入:指针数组长度;
对象信息(输入方式见输入样例);
要显示的对象在数组中的位置;
exit。
输出:用户要求显示的对象信息。
输入样例:4
Person Zhang
Student Zhao 200905
Graduate Li 200905 DataMining
Teacher Luo 10
0
2
exit
输出样例:Person Zhang
Graduate Li 200905 DataMining
提示:基类的成员函数Print()定义成虚函数。
解决代码如下:
#include <iostream>using namespace std;#include <string>#include <cstdlib>class Person{protected: string Name;public: Person(string Name = "\0") { this->Name = Name; } virtual void Print() { cout<<"Person "<<Name<<endl; }};class Student : public Person{protected: int Number;public: Student(int Number = 0,string Name = "\0"):Person(Name) { this->Number = Number; } virtual void Print() { cout<<"Student "<<Name<<' '<<Number<<endl; }};class Teacher : public Person{protected: int Year;public: Teacher(int Year = 0,string Name = "\0"):Person(Name) { this->Year = Year; } virtual void Print() { cout<<"Teacher "<<Name<<' '<<Year<<endl; }};class Graduate : public Student{protected: string Research;public: Graduate(string Research = "\0",string Name = "\0",int Number = 0) :Student(Number,Name) { this->Research = Research; } void Print() { cout<<"Graduate "<<Name<<' '<<Number<<' '<<Research<<endl; }};int main(){ int length; cin>>length; Person* *p = new Person*[length]; for(int i = 0; i < length; ++i) { string obj_Name; string Name,Research; int Number,Year; cin>>obj_Name; if(obj_Name == "Person") { cin>>Name; p[i] = new Person(Name); } else if(obj_Name == "Student") { cin>>Name>>Number; p[i] = new Student(Number,Name); } else if(obj_Name == "Teacher") { cin>>Name>>Year; p[i] = new Teacher(Year,Name); } else if(obj_Name == "Graduate") { cin>>Name>>Number>>Research; p[i] = new Graduate(Research,Name,Number); } else { exit(EXIT_FAILURE); } } while(true) { string strTemp; cin>>strTemp; if(strTemp == "exit") break; int index = atoi(strTemp.c_str()); if(index < 0 || index >= length) break; p[index]->Print(); } for(int i = 0; i < length; ++i) delete p[i]; delete p; return 0;}
- 虚函数(virtual function)
- C++——中的虚函数(Virtual function)
- 虚函数(virtual function)
- C++虚函数virtual function
- c++ virtual function 虚函数
- C++中的虚函数(virtual function)
- C++中的虚函数(virtual function)
- C++中的虚函数(virtual function)
- C++中的虚函数(virtual function)
- C++中的虚函数(virtual function)
- C++中的虚函数(virtual function)
- C++中的虚函数(virtual function)
- C++中的虚函数(virtual function)
- C++中的虚函数(virtual function)
- C++中的虚函数(virtual function)
- C++中的虚函数(virtual function)
- C++中的虚函数(virtual function)
- C++中的虚函数(virtual function)
- 标准库 STL :Allocator能做什么?
- UI设计5不要
- oracle 常用函数
- SQL Server 2008 Express 无法创建 User Instance 的解决
- /var/lib/mysql/mysql.sock错误的解决办法
- C++虚函数virtual function
- vb 读取xml文件
- Web服务(Web service)基础及相关术语简介
- 学习C#程序集
- VC: ConvertBSTRToString使用时可能出现无法链接(Lind 2001)的问题
- C#实现快速排序
- 集合
- User Instance=true
- 显卡参数详解