5.编写一个有理数类,其数据成员通过带默认参数值的构造函数进行初始化,把原有理数类中的3个构造函数合并为1个,在主函数中测试这个类。要求采用多文件程序结构实现。 //有理数Ratio.h
#ifndef Ratio_h_ #define Ratio_h_ class Ratio {
int num; //分子:整数 int den; //分母:非零整数 public: Ratio(int n=0,int d=1){num=n;den=d;cout<<\"调用2个参数的构造函数\";} void disp() {cout<<\"num/den=\"< #include void main() { Ratio r1; r1.disp(); Ratio r2(5); r2.disp(); Ratio r3(10,5); r3.disp(); } 6.在第5题的基础上编写有理数类,在该类中增添一个拷贝构造函数,分析拷贝构造函数的调用时机。要求采用多文件程序结构实现。 //有理数Ratio.h #ifndef Ratio_h_ #define Ratio_h_ class Ratio { int num; //分子:整数 int den; //分母:非零整数 public: Ratio(int n=0,int d=1){num=n;den=d;cout<<\"调用2个参数的构造函数\";} Ratio(const Ratio &rr) {num=rr.num;den=rr.den; cout<<\"用复制构造函数把第2个对象的值赋给第4个对象\"; } void disp() {cout<<\"num/den=\"< #include void main() { Ratio r1; r1.disp(); Ratio r2(5); r2.disp(); Ratio r3(10,5); r3.disp(); Ratio r4(r2); r4.disp(); } ---------------------------------- 4月14日作业 类与对象: 8. 定义一个Student类,包括:一个数据成员score(分数)、两个静态数据成员 total(总分)和学生人数count;函数成员scoretotalcount(float s)用于设置分数、求总分和累计学生人数;静态函数成员sum()用于返回总分;静态函数成员average()用于求分数平均值。 在主函数中,输入某班同学的成绩,并调用上述函数求全班学生的总分和平均分。 用多文件结构。 提示:(1)可用对象数组记录全班同学的数据,为节省调试时间,可设为 有10个同学元素。 (2)可用动态链表方式。 9. 类X,包含私有数据成员x、构造函数X(int i)和函数成员getx()。再定义两 个普通函数sum和sum1求两个对象的和(函数参数自己设置),其中将 sum函数声明为类X的友元函数。 在从键盘输入两个数据对新创建的两个对象进行初始化,再用友员函数和非友元函数分别求出两个对象之和。 用多文件结构。 10. 有两个类Cla_1和Cla_2。类Cla_1有私有数据成员name和age、一个构 造函数,Cla_2中只有一个公有函数成员show。将类Cla_2声明为Cla_1的友员类,Cla_2的show函数中就可以访问类Cla_1的私有数据成员。 在主函数中用他们分别生成两个对象,然后对这两个对象的私有成员 进行访问。 用多文件结构。 提示:show函数要访问类Cla_1中的私有数据成员,就必须用对象作 为参数传递,即将类Cla_1的对象作为实参来调用show函数。 第8题,参考程序用对象数组,题目已经假设有10个学生。 //sta_stu.h 类声明 class student { public: void scoretotalcount(float); static float sum(); static float average(); private: float score; static float total; static float count; }; //student.cpp 类实现 #include \"stdafx.h\" #include float student::total=0; float student::count=0; void student::scoretotalcount(float s) { score=s; total+=s; count++; } float student::sum() { return total; } float student::average() { return (total/count); } //类应用 #include int main() { student s[10]; //设学生人数为10人 int i; float score; for(i=0;i<10;i++) { cout<<\"请输入第 \"<>score; s[i].scoretotalcount(score); } cout<<\"全班同学总分是 \"< // friend.h 头文件 class X { int x; public: X(int ); int getx(); friend void sum(X &,X &); }; 平均分是 //friend.cpp 类实现文件 #include \"stdafx.h\" #include X::X(int i) { x=i; } int X::getx() { return x; } void sum(X &a,X &b) { cout<<\"用友员函数求总和:\"< #include void sum1(X &a,X &b) { cout<<\"用普通函数求总和:\"< int a,b; cout<<\"请输入a b的值:\"; cin>>a>>b; X m(a),n(b); sum(m,n); sum1(m,n); return 0; } 第10题 //cla.h 头文件 class Cla_1 { friend class Cla_2; char *name; int age; public: Cla_1(char *str,int i); }; class Cla_2 { public: void show(Cla_1 x); }; //cla.cpp 类实现 #include\"stdafx.h\" #include\"cla.h\" #include Cla_1::Cla_1(char *str,int i) { name=str; age=i; } void Cla_2::show(Cla_1 x) { cout<<\"姓名:\"< #include \"stdafx.h\" #include\"cla.h\" #include #include int main(int argc, char* argv[]) { Cla_1 obj1(\"陈晓红\ Cla_2 obj2; obj2.show(obj1); return 0; } ------------------ 5月5日作业 继承与派生: 1. 定义一个rectangle类,它包含两个数据成员length和width、用于求长方形面积的函数成员。再定义rectangle的派生类rectangular,它包含一个新数据成员height和用于求长方体体积的函数成员。在main函数中,使用两个类,求长方形的面积和长方体的体积。要求:从键盘输入长方形的长和宽及长方体的高,再用输入的数据作为创建对象的参数来求长方形的面积和长方体的体积。 //inheritance.h 类声明 class rectangle { public: rectangle(float l, float w); float area(); float getlength(); float getwaidth(); private: float length; float width; }; class rectangular:public rectangle { public: rectangular(float l,float w,float h); float getheight(); float volume(); private: float height; }; //rectangle.cpp 类实现 #include rectangle::rectangle(float l, float w) {length=l; width=w; } float rectangle::area() {return (length*width); } float rectangle::getlength() { return length; } float rectangle::getwaidth() { return width; } rectangular::rectangular(float l,float w,float h):rectangle(l,w) { height=h; } float rectangular::getheight() { return height; } float rectangular::volume() { return area()*height; } //main.cpp 类应用 #include void main() { float m_l,m_w,m_h; cout<<\"请输入长方形的长和宽:\"; cin>>m_l>>m_w; rectangle obj1(m_l,m_w); cout<<\"length=\"< rectangular obj2(m_l,m_w,m_h); cout<<\"length=\"< 5月12日作业 重载运算符 1. 实验指导书上实验二的第1题。 编写有理数(即分数,包括整数类型的分子和分母)类,并进行运算符重载,编写运算符“+”、“-”、“*”、“/”的重载函数,在主函数的函数体内中实现使用运算符直接进行有理数对象的加、减、乘、除运算。 #include class rational //定义rational类 { public: //公有成员 rational(int a=1,int b=1) { up=a; down=b; } friend ostream & operator <<(ostream&,rational&); friend istream & operator >>(istream&,rational&); friend rational operator +(rational &,rational &); friend rational operator -(rational &,rational &); friend rational operator *(rational &,rational &); friend rational operator /(rational &,rational &); //重载运算符函数声明 protected: //受保护成员 int up; int down; }; ostream & operator <<(ostream & output,rational&A) { output< rational operator +(rational &A,rational &B) //定义重载运算符 + { return rational(A.up*B.down+B.up*A.down,A.down*B.down); } rational operator -(rational &A,rational &B) // 定义重载运算符 - { return rational(A.up*B.down-B.up*A.down,A.down*B.down); } rational operator *(rational &A,rational &B) // 定义重载运算符 * { return rational(A.up*B.up,A.down*B.down); } rational operator /(rational &A,rational &B) //定义重载运算符 / { return rational(A.up*B.down,A.down*B.up); } void main() { rational a1,a2,b; cin>>a1; cout< 5月19日作业 重载运算符: 2. 设计一个字符串类String,并使其完成下列功能: (1) 使用“=”运算符完成两个字符串的赋值; (2) 使用“==”运算符完成对两个字符串是否相等的判断; (3) 使用“+”运算符完成两个字符串的连接。 编写程序实现该类,并进行测试。 3. 定义一个类nauticalmile_kilometer,它包含数据成员kilometer,还包含一个构造函数,可对数据成员初始化;函数成员print用于输出数据成员的值,类型转换函数double()实现把千米转换为海里(1海里=1.852千米)。编写程序测试类nauticalmile_kilometer。 第2题: //header.h //header.h #include char *p_str; public: String(char *str=NULL); String(String &s); ~String(); void operator=(String &str); int operator==(String &str); String operator+(String &str); void display(); }; //classcpp.cpp #include String::String(char *str) { if(str!=NULL) {p_str=new char[strlen(str)+1]; strcpy(p_str,str); } else p_str=NULL; } String::String(String &str) {p_str=new char[strlen(str.p_str)+1]; strcpy(p_str,str.p_str); } String::~String() { delete p_str; } void String::operator =(String &str) { p_str=new char[strlen(str.p_str)+1]; strcpy(p_str,str.p_str); } int String::operator ==(String &str) { return (strcmp(p_str,str.p_str)==0); //字符串比较函数 //返回0,两串相等;返回>0,左串>右串 } void String::display() {cout< p_str=new char[strlen(s)+strlen(str.p_str)+1]; strcpy(p_str,s); strcat(p_str,str.p_str); //字符串连接函数 delete s; return *this; } //main.cpp #include void main() { String s1(\"ABC\"),s2(\"abcde\"); cout<<\"字符串s1:\"; s1.display(); cout<<\"字符串s2:\"; s2.display(); if(s1==s2) cout<<\"字符串s1和字符串s2相等\"< 另一程序: #include public: String(char* q=0){p=q;}; String & operator =(String & a); String operator +(String &a); friend bool operator ==(String &a1,String &a2); friend ostream& operator <<(ostream&,String A); private: char *p; }; String & String::operator=(String &a) { p=a.p; return *this; } String String::operator +(String &a) { char *p0; p0=new char[strlen(p)+strlen(a.p)+1]; strcpy(p0,p); return String(strcat(p0,a.p)); } bool operator==(String &a1,String &a2) { if(strcmp(a1.p,a2.p)==0) return 1; else return 0; } ostream& operator <<(ostream & output,String A) { output< if(a3==a2) cout<<\"相等\"< #include const double n=1.853; //1海里=1.852千米 class nauticalmile_kilometer { public: nauticalmile_kilometer(int km,double m) {kilometer=km;meter=m;} void print() {cout<<\"kilometer=\"< void main() {nauticalmile_kilometer obj(100,50); obj.print(); cout<<\"nauticalmile=\"< 5月26日作业 多态性 第1题 1、 实验指导书多态性实验第2题。 BaseRun: Run() DogRun: Run() CarRun: Run() PeopleRun: Run() 三个类的Run()的内容均在BaseRun::Run()内容的基础上进行修改。 这种派生,BaseRun::Run()要设为什么函数? 怎样输出各类中的Run()? 2、实验指导书多态性实验第3题 3、编写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。用虚函 数分别计算几种图形面积。要求用基类指针数组,使它每一个元素指向一个派生类对象。 4、使用虚函数编写程序,求球体和圆柱体的体积和表面积。由于球体和圆柱体都可以看做由圆继承而来,所以可以定义圆类circle作为基类。在circle类中定义一个数据成员radius和两个虚函数area()和volume()。由circle类派生sphere类和column类。在派生类中对虚函数area()和volume()重新定义,分别求球体和圆柱体的体积及表面积。 5、(选做题) 某学校对教师每月工资的计算规定如下:固定工作+课时补贴。教授的固定工作为5000元,每个课时补贴50元;副教授的固定工资为3000元,每个课时补贴30元;讲师的固定工资为2000元,每个课时补贴20元。定义教师抽象类,派生不同职称的教师类,编写程序求若干个教师的月工资。 第1题? //baserun.h #include #ifndef _baserun_h_ #define _baserun_h_ class BaseRun {public: virtual void Run() {cout<<\"\\n.......clase BaseRun::Run()......\\n\";} }; #endif //dogrun.h #include class DogRun:public BaseRun {public: void Run() {cout<<\"\\n.......clase DogRun::Run()......\\n\";} }; #endif //carrun.h #include class CarRun :public BaseRun {public: void Run() {cout<<\"\\n.......clase CarRun::Run()......\\n\";} }; #endif //people.h #ifndef _people_h_ #define _people_h_ #include class PeopleRun:public BaseRun {public: void Run() {cout<<\"\\n.......clase PeopleRun::Run()......\\n\";} }; #endif // shiyan7_2.cpp : 类应用 // #include \"stdafx.h\" #include CarRun c; DogRun d; PeopleRun p; BaseRun *b1=&c; b1->Run(); b1=&d; b1->Run(); b1=&p; b1->Run(); } 第2题: #include public: virtual void Run() { cout<<\"\\n…………class BaseRun::Run()…………\\n\"; } virtual ~BaseRun(){cout<<\"\\n…………BaseRun…………\\n\";} }; class DogRun:public BaseRun { public: void Run() { cout<<\"\\n…………class DogRun::Run()…………\\n\"; } ~DogRun(){cout<<\"\\n…………DogRun…………\\n\";} }; class CarRun:public BaseRun { public: void Run() { cout<<\"\\n…………class CarRun::Run()…………\\n\"; } ~CarRun(){cout<<\"\\n…………CarRun…………\\n\";} }; class PeopleRun:public BaseRun { public: void Run() { cout<<\"\\n…………class PeopleRun::Run()…………\\n\"; } ~PeopleRun(){cout<<\"\\n…………PeopleRun…………\\n\";} }; void main() { BaseRun *p,d; DogRun a; CarRun b; PeopleRun c; p=&d; p->Run(); p=&a; p->Run(); p=&b; p->Run(); p=&c; } p->Run();
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务