C++上机实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c上机实验报告”。
C++上机实验报告
实验名称:实验
专业班级:
姓
名:
学
号:
实验日期:11 实验
目录
1.实验目的
2.实验内容
3.程序代码
4.调试结果
5.实验心得 1.实验目的 实验10(1)进一步了解运算符重载的概念和使用方法;(2)掌握几种常用的运算符重载的方法;(3)了解转换构造函数的使用方法;
(4)了解在Visual C++6.0环境下进行运算符重载要注意的问题。实验11(1)了解继承在面向对象程序设计中的重要作用;(2)进一步理解继承和派生的概念;
(3)掌握通过继承派生出一个新的类的方法;(4)了解虚基类的作用和用法。
2.实验内容 实验10 事先编好程序,上机进行调试和运行程序,分析结果。(1)声明一个复数类Complex,重载运算符“+”,“-”,“*”,“/”,使之能用于复数的加,减,乘,除,运算符重载函数作为Complex类成员的函数。编程序,分别求两个复数之和,差,积和商。(2)声明一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。
运行程序,分别求两个复数之和,整数和复数之和,(3)有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于两个矩阵相加
(4)声明一个Teacher(教师)类和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(名字),sex(性别)。编写程序,将一个Student对象(学生)转换为Teacher(教师)类,只将以上三个相同的数据成员移植过去。可以设想为:一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说任然是有用的,应当保留并成为其教师的数据的一部分。
实验11
事先编写好程序,上机调试和运行程序,分析结果。
(1)将教材第11章例11.1的程序片段补充和改写成一个完整的、正确的程序,用公用继承方式。在程序中应当包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。
(2)将教材第11章例11.3的程序修改、补充,写成一个完整、正确的程序,用保护继承方式。在程序中应包括输入数据的函数。(3)修改上面第(2)题的程序,改为用公用继承方式。上机调试程序,使之能够正确运行并得到正确的结果。
对这两种继承方式做比较分析,考虑在什么情况下二者不能互相替换。
(4)分别声明Teacher(教师)类和Cadre(干部)类,采用多 重继承方式由这两个类派生出新类Teacher-Cadre(教师兼干部)。要求:
Ⅰ.在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。
Ⅱ.在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务)。在Teacher-Cadre类中还包含数据成员wages(工资)。
Ⅲ.在基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。Ⅴ.在类体中声明成员函数,在类外定义成员函数。
Ⅵ.在派生类Teacher-Cadre的成员函数show中调用Teacher类中的display函数,输出性命、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。
3.程序代码 实验10(1)
#include using namespace std;cla Complex {public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} Complex operator +(Complex &c2);Complex operator-(Complex &c2);Complex operator*(Complex &c2);Complex operator/(Complex &c2);void display();private: double real;double imag;};
Complex Complex::operator +(Complex &c2){Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;}
Complex Complex::operator-(Complex &c2){Complex c;c.real=real-c2.real;c.imag=imag-c2.imag;return c;}
Complex Complex::operator*(Complex &c2){Complex c;c.real=real*c2.real-imag*c2.imag;c.imag=imag*c2.real+real*c2.imag;return c;}
Complex Complex::operator/(Complex &c2){Complex c;c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);return c;} void Complex::display(){cout
(2)
#include using namespace std;cla Complex {public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} Complex operator+(Complex &c2);Complex operator+(int &i);friend Complex operator+(int &,Complex &);void display();private:
double real;
double imag;};
Complex Complex::operator+(Complex &c){return Complex(real+c.real,imag+c.imag);}
Complex Complex::operator+(int &i){return Complex(real+i,imag);}
void Complex::display(){cout
Complex operator+(int &i,Complex &c){return Complex(i+c.real,c.imag);}
int main(){Complex c1(3,4),c2(5,-10),c3;int i=5;c3=c1+c2;cout
#include using namespace std;cla Matrix {public: Matrix();friend Matrix operator+(Matrix &,Matrix &);void input();void display();private:
int mat[2][3];};
Matrix::Matrix(){for(int i=0;i
Matrix operator+(Matrix &a,Matrix &b){Matrix c;for(int i=0;i
void Matrix::input(){cout>mat[i][j];}
void Matrix::display(){for(int i=0;i
#include using namespace std;cla Student {public: Student(int,char[],char,float);int get_num(){return num;} char * get_name(){return name;} char get_sex(){return sex;} void display(){cout
int num;
char name[20];
char sex;
float score;};
Student::Student(int n,char nam[],char s,float sco){num=n;strcpy(name,nam);sex=s;score=sco;}
cla Teacher {public: Teacher(){} Teacher(Student&);Teacher(int n,char nam[],char sex,float pay);void display();private:
int num;
char name[20];
char sex;
float pay;};
Teacher::Teacher(int n,char nam[],char s,float p} {num=n;strcpy(name,nam);sex=s;pay=p;}
Teaxher::Teacher(Student& stud){num=stud.get_num();strcpy(name,stud.get_name());sex=stud.get.sex();pay=1500;}
void Teacher::display(){cout
int main(){Teacher teacher1(10001,“Li”,'f',1234.5),teacher2;Student student1(20010,“Wang”,'m',89.5);cout
#include using namespace std;cla Student {public:
void get_value()
{cin>>num>>name>>sex;}
void display()
{cout
cout
int num;
char name[10];char sex;};
cla Student1:public Student {public: void get_value_1(){get_value();cin>>age>>addr;} void display_1(){cout
char addr[30];};
int main(){Student1 stud1;stud1.get_value_1();stud1.display();stud1.display_1();return 0;}(2)
#include using namespace std;cla Student {public: void get_value();
void display();protected: int num;
char name[10];
char sex;};
void Student::get_value(){cin>>num>>name>>sex;} void Student::display(){cout
cla Student1:protected Student {public: void get_value_1();void display1();private: int age;char addr[30];};
void Student1::get_value_1(){get_value();cin>>age>>addr;} void Student1::display1(){cout
int main(){Student1 stud1;stud1.get_value_1();stud1.display1();return 0;}(3)
#include using namespace std;cla Student {public: void get_value();void display();protected:
int num;
char name[10];
char sex;};
void Student::get_value(){cin>>num>>name>>sex;}
void Student::display(){cout
cla Student1:public Student {public: void get_value_1();void display1();private:
int age;
char addr[30];};
void Student1::get_value_1(){get_value();cin>>age>>addr;} void Student1::display1(){cout
int main(){Student1 stud1;stud1.get_value_1();stud1.display1();return 0;}(4)
#include #include using namespace std;cla Teacher {public:
Teacher(int,char[],char);void display();private: int num;char name[20];char sex;};
Teacher::Teacher(int n,char nam[],char s){num=n;strcpy(name,nam);sex=s;}
void Teacher::display(){cout
cla BirthDate {public: BirthDate(int,int,int);void display();void change(int,int,int);private: int year;int month;int day;};
BirthDate::BirthDate(int y,int m,int d){year=y;month=m;day=d;}
Void BithDate::display(){cout
void BirthDate::change(int y,int m,int d){year=y;month=m;day=d;}
cla Profeor:public Teacher {public: Profeor(int,char[],char,int,int,int,float);void display();void change(int,int,int);private: float area;BirthDate birthday;}
Profeor::Profeor(int n,char name[20],char s,int y,int m,int d,float a): Teacher(n,name,s),birthday(y,m,d),area(a){}
void Profeor::display(){Teacher::display();birthday.display();cout
Int main(){Profeor profl(3012,”Zhang”,’f’,1949,10,1,125.4);cout
4.调试结果
实验10(1)c1+c2=(8,-6i)c1-c2=(-2,14i)c1*c2=(55,-10i)c1/c2=(-0.2,0.4)(2)c1+c2=(8,-6i)i+c1=(8,4i)c1+i=(8,4i)
(3)
input value of Matrix:11 22 33 44 55 66 input value of Matrix:12 13 14 15 16 17 Matrix a: 11 22 33 44 55 66 Matrix b: 12 13 14 15 16 17 Matrix c=Matrix a + Matrix b : 23 25 47 59 71 83
(4)student1 : num :20010 name:Wang sex:m score;89.5 Teacher2: num:20010 name:Wang sex:m pay:1500
实验11(1)
10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 addre:Beijing
(2)
10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 addre:Beijing
(3)
10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 addre:Beijing
(4)The original data: num:3012 name:Zhang sex:f area:125.4
The new data: num:3012 name:Zhang sex:f birthday:6/1/1950 area:125.4 5.实验心得
这一次上机实验,除了了解到了运算符重载的概念和用法,掌握几种常用的运算符重载的方法,了解转换构造函数的使用方法,同时也能了解虚基类的用法,理解继承与派生的概念。
但是,最主要的,我觉得,是通过这一次的上机实验,我了解到,有的实验本身是没有程序错误的,但是,也会由于实验环境的影响而不能正常运行。换句话说,有的程序并不能在Visaul C++的环境下运行,而不是程序自身的问题。所以,对于没办法调试成功的程序,我们也不能一味的认为程序有错误,要学会理性的判断程序的对错,再下结论。