资源描述
31.定义盒子Box类,要求具备如下组员:长、宽、高分别为x,y,z,可设置盒子形状;可计算盒子体积;可计算盒子的表面积。
#include <iostream>
#include <iostream>
using namespace std;
class Box{
public:
int weight;
int length;
int hight;
void box_shape(int w, int l, int h);
int box_volume(int w, int l, int h);
int box_area(int w, int l, int h);
};
int main()
{
Box mybox;
cout << "Please Enter weight and length and hight:";
cin >> mybox.weight >> mybox.length >> mybox.hight;
int box_v, box_a;
mybox.box_shape(mybox.weight, mybox.length, mybox.hight);
box_v = mybox.box_volume(mybox.weight, mybox.length, mybox.hight);
cout << "This box's volume =" << box_v << endl;
box_a = mybox.box_area(mybox.weight, mybox.length, mybox.hight);
cout << "This box's area = " << box_a << endl;
}
void Box::box_shape(int w, int l, int h)
{
if(w == l && l == h)
cout << "This is a Cube!" << endl;
else
cout << "This is a cuboid!" << endl;
}
int Box::box_volume(int w, int l, int h)
{
return w * l * h;
}
int Box::box_area(int w, int l, int h)
{
return 2 * w * l + 2 * l * h + 2 * w * h;
}
32. 有两个长方柱,其长、宽、高分别为:(1)30,20,10;(2)12,10,20。分别求他们的体积。编一个基于对象的程序,在类中用带参数的结构函数。
#include <iostream>
class Box{
private:
int length;
int weight;
int hight;
public:
Box(int, int, int);
int volume();
};
int main()
{
using namespace std;
Box mybox1(30, 20, 10);
cout << "The first Box's volume = " << mybox1.volume() << endl;
Box mybox2(12, 10, 30);
cout << "The second Box's volume = " << mybox2.volume() << endl;
return 0;
}
Box::Box(int l, int w, int h)
{
length = l;
weight = w;
hight = h;
}
int Box::volume()
{
return (hight * weight * length);
}
33. 有两个长方柱,其长、宽、高分别为:(1)12,20,25;(2)10,30,20。分别求他们的体积。编一个基于对象的程序,且定义两个结构函数,其中一个有参数,一个无参数。
#include <iostream>
class Box{
private:
int length;
int wight;
int height;
public:
Box();
Box(int, int, int);
int volume();
};
int main()
{
using namespace std;
Box mybox1;
cout << "The first box's volume = " << mybox1.volume() << endl;
Box mybox2(10, 30, 20);
cout << "The second box's volume = " << mybox2.volume() << endl;
return 0;
}
Box::Box()
{
length = 12;
wight = 20;
height = 25;
}
Box::Box(int l, int w, int h)
{
length = l;
wight = w;
height = h;
}
int Box::volume()
{
return length * wight * height;
}
34. 申明一个类模板,利用它分别实现两个整数、浮点数和字符的比较,求出大数和小数。
#include <iostream>
using namespace std;
template<class numtype>
class Compare
{public:
Compare(numtype a,numtype b){x=a;y=b;}
numtype max(){return (x>y)?x:y;}
numtype min(){return (x<y)?x:y;}
private:
numtype x,y;
};
int main()
{Compare<int>cmp1(3,4);
cout<<cmp1.max()<<" is the Maximum of two inteder numbers."<<endl;
cout<<cmp1.min()<<" is the Minimum of two inteder numbers."<<endl<<endl;
Compare<float> cmp2(45.78,93.6);
cout<<cmp2.max()<<" is the Maximum of two float numbers."<<endl;
cout<<cmp2.min()<<" is the Minimum of two float numbers."<<endl<<endl;
Compare<char> cmp3('a','A');
cout<<cmp3.max()<<" is the Maximum of two characters."<<endl;
cout<<cmp3.min()<<" is the Minimum of two characters."<<endl;
return 0;
}
35. 建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1,3,5个学生的数据。初值自拟。
#include<iostream>
using namespace std;
class Student
{
public:
Student(int n,int s):num(n),score(s){}
void display()
{cout<<num<<" "<<score<<endl;}
private:
int num;
int score;
};
int main()
{
Student stud[5]={Student(01,70),Student(02,71),Student(03,72),Student(04,73),Student(05,74)};
Student *p=stud;
for(int i=0;i<=2;p=p+1,i++)
p->display();
return 0;
}
36. 建立一个对象数组,内放5个学生的数据(学号、成绩),设置一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。初值自拟。
#include<iostream>
using namespace std;
class Student
{
public:
Student(int n,int s):num(n),score(s){}
int num;
int score;
};
int main()
{
Student stud[5]={Student(01,70),Student(02,71),Student(03,72),Student(04,73),Student(05,74)};
void max(Student *);
Student *p=&stud[0];
max(p);
return 0;
}
void max(Student *arr)
{
float max_score=arr[0].score;
for(int i=0;i<5;i++)
if(max_score<arr[i].score)
{max_score=arr[i].score;}
cout<<max_score<<" "<<arr[i].num<<endl;
}
38. 定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数重载为非组员、非友元的一般函数。编写程序,求两个复数之和。初值自拟。
#include <iostream>
class Complex{
private:
double real;
double image;
public:
Complex();
Complex(double, double);
double get_real();
double get_image();
};
Complex operator + (Complex &, Complex &);
int main()
{
Complex s1(3, 4);
Complex s2(5, -10);
Complex c3;
c3 = s1 + s2;
std::cout << "s1 + s2 = ";
std::cout << "(" << c3.get_real() << ", " << c3.get_image() << "i)" << std::endl;
// Complex s1(3, 4);
// std::cout << s1.get_real() << std::endl;
return 0;
}
Complex::Complex(double r, double i)
{
real = r;
image = i;
}
Complex::Complex()
{
real = 0;
image = 0;
}
double Complex::get_real()
{
return real;
}
double Complex::get_image()
{
return image;
}
Complex operator + (Complex & s1, Complex & s2)
{
Complex c(s1.get_real() + s2.get_real(), s1.get_image() + s2.get_image());
return c;
}
39. 定义一个复数类Complex,重载运算符“+”,“—”,使之能用于复数的加,减运算,运算符重载函数作为Complex类的组员函数。编程序,分别求出两个复数之和,差。初值自拟。
#include <iostream>
class Complex{
private:
double real;
double image;
public:
Complex();
Complex(double, double);
Complex operator + (Complex &);
Complex operator - (Complex &);
void display();
};
int main()
{
Complex s1(3, 4), s2(5, 6), c;
c = s1 + s2;
c.display();
c = s1 - s2;
c.display();
return 0;
}
Complex::Complex()
{
real = 0;
image = 0;
}
Complex::Complex(double r, double i)
{
real = r;
image = i;
}
Complex Complex::operator + (Complex & s1)
{
Complex c;
c.real = s1.real + real;
c.image = s1.image + image;
return c;
}
Complex Complex::operator - (Complex & s1)
{
Complex c;
c.real = real - s1.real;
c.image = image - s1.image;
return c;
}
void Complex::display()
{
using namespace std;
cout << real << " " << image << endl;
}
40. 定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。参加运算的两个运算量能够都是类对象,也能够其中有一个是整数,次序任意。例如:c1+c2,i+c1,c1+i均合法(设i为整数,c1,c2为复数)。编程序,分别求两个复数之和、整数和复数之和。初值自拟。
#include <iostream>
class Complex
{
private:
double real;
double imag;
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();
};
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()
{
using namespace std;
cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
Complex operator+(int &i,Complex &c)
{
return Complex(i+c.real,c.imag);
}
int main()
{
using namespace std;
Complex c1(3,4),c2(5,-10),c3;
int i=5;
c3=c1+c2;
cout<<"c1+c2=";
c3.display();
c3=i+c1;
cout<<"i+c1=";
c3.display();
c3=c1+i;
cout<<"c1+i=";
c3.display();
return 0;
}
41. 有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加。如c=a+b。初值自拟。
#include <iostream>
using namespace std;
class Matrix //定义Matrix类
{public:
Matrix(); //默认结构函数
friend Matrix operator+(Matrix &,Matrix &); //重载运算符“+”
void input(); //输入数据函数
void display(); //输出数据函数
private:
int mat[2][3];
};
Matrix::Matrix() //定义结构函数
{for(int i=0;i<2;i++)
for(int j=0;j<3;j++)
mat[i][j]=0;
}
Matrix operator+(Matrix &a,Matrix &b) //定义重载运算符“+”函数
{Matrix c;
for(int i=0;i<2;i++)
for(int j=0;j<3;j++)
{c.mat[i][j]=a.mat[i][j]+b.mat[i][j];}
return c;
}
void Matrix::input() //定义输入数据函数
{cout<<"input value of matrix:"<<endl;
for(int i=0;i<2;i++)
for(int j=0;j<3;j++)
cin>>mat[i][j];
}
void Matrix::display() //定义输出数据函数
{for (int i=0;i<2;i++)
{for(int j=0;j<3;j++)
{cout<<mat[i][j]<<" ";}
cout<<endl;}
}
int main()
{Matrix a,b,c;
a.input();
b.input();
cout<<endl<<"Matrix a:"<<endl;
a.display();
cout<<endl<<"Matrix b:"<<endl;
b.display();
c=a+b; //用重载运算符“+”实现两个矩阵相加
cout<<endl<<"Matrix c = Matrix a + Matrix b :"<<endl;
c.display();
return 0;
}
42. 将运算符“+”重载为适合用于复数加法,重载函数不作为组员函数,而放在类外,作为Complex类的友元函数。初值自拟。
#include <iostream>
class Compare
{
private:
int real;
int imag;
public:
Compare();
Compare(int, int);
friend Compare operator+(Compare & c1, Compare & c2);
void display();
};
int main()
{
Compare c1(3, 4), c2(2, 5), c3;
c3 = c1 + c2;
c3.display();
return 0;
}
Compare::Compare()
{
real = 0;
imag = 0;
}
Compare::Compare(int r, int i)
{
real = r;
imag = i;
}
void Compare::display()
{
using namespace std;
cout << real << " " << imag << "i" << endl;
}
Compare operator+(Compare & c1, Compare & c2)
{
Compare c(c1.real + c2.real, c1.imag + c2.imag);
return c;
}
43. 定义一个字符串类String,用来存储不定长的字符串,重载运算符“==”,,用于两个字符串的等于比较运算。初值自拟。
44. 定义一个字符串类String,用来存储不定长的字符串,重载运算符"<",用于两个字符串的小于的比较运算。初值自拟。
45. 定义一个字符串类String,用来存储不定长的字符串,重载运算符">",用于两个字符串的不小于的比较运算。初值自拟。
#include <iostream>
#include <string>
using namespace std;
class String
{
public:
String() { p=NULL;}
String(char *str);
friend bool operator>(String &string1,String &string2);
friend bool operator<(String &string1,String &string2);
friend bool operator==(String &string1,String &string2);
void display();
private:
char *p;
};
String::String(char *str)
{ p=str; }
void String::display()
{ cout<<p;} //输出P所指向的字符串
bool operator>(String &string1,String &string2)
{
if(strcmp(string1.p,string2.p)>0)
return true;
else
return false;
}
bool operator<(String &string1,String &string2)
{
if(strcmp(string1.p,string2.p)<0)
return true;
else
return false;
}
bool operator==(String &string1,String &string2)
{
if(strcmp(string1.p,string2.p)==0)
return true;
else
return false;
}
void compare(String &string1,String &string2)
{
if(operator>(string1,string2)==1)
{
string1.display();cout<<">";string2.display();}
else if(operator<(string1,string2)==1)
{
string1.display();cout<<"<";string2.display();
}
else if(operator==(string1,string2)==1)
{
string1.display();cout<<"=";string2.display();
}
cout<<endl;
}
int main()
{
String string1("Hello"),string2("Book"),
string3("Computer"),string4("Hello");
compare(string1,string2);
compare(string2,string3);
compare(string1,string4);
return 0;
}
46. 定义一个描述学生基本情况的类,数据组员包括姓名、学号、C++成绩、英语和数学成绩,组员函数包括输出数据,求出总成绩和平均成绩。数据自拟。
#include <iostream>
class Student
{
private:
char * name;
int id;
int cpp_source;
int eng_source;
int math_source;
public:
Student(char *, int, int, int, int);
void sum_source();
void avg_source();
};
int main()
{
Student s("John", 1, 90, 80, 97);
s.sum_source();
s.avg_source();
return 0;
}
Student::Student(char * n, int i, int cs, int es, int ms)
{
name = n;
id = i;
cpp_source = cs;
eng_source = es;
math_source = ms;
}
void Student::sum_source()
{
std::cout << name << " The sum of source: " <<
cpp_source+eng_source+math_source << std::endl;
}
void Student::avg_source()
{
double avg;
avg = (cpp_source + eng_source + math_source) / 3;
std::cout << "The avg of source: " << avg << std::endl;
}
47. 先建立一个Point(点)类,包括数据组员x,y(坐标点)。以它为基类,派生出一个Circle(圆)类,增加数据组员r(半径),再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,在增加数据组员h(高)。编写程序,重载运算符“<<”和“>>”,使之能够用于输出以上类对象。
#include <iostream>
class Point
{
protected:
int x, y;
public:
Point(){x = 0, y = 0;}
Point(int a, int b)
{
this->x = a;
this->y = b;
}
void setX(int a){x = a;}
void setY(int b){y = b;}
int getX(){return x;}
int getY(){return y;}
};
class Circle:public Point
{
protected:
int r;
public:
Circle(int x, int y, int r):Point(x, y){this->r = r;}
void setR(int a){r = a;}
int getR(){return r;}
};
class Cylinder:public Circle
{
protected:
int h;
public:
Cylinder():Circle(0, 0, 0),h(0){}
Cylinder(int x, int y, int r, int h):Circle(x, y, r){this->h = h;}
void setH(int a){h = a;}
int getH(){return h;}
friend std::istream & operator>>(std::istream &, Cylinder &);
friend std::ostream & operator<<(std::ostream &, Cylinder &);
};
std::istream & operator>>(std::istream & input, Cylinder & cc)
{
int _x, _y, _r, _h;
std::cout << "Enter the Cylinder: " << std::endl;
input >> _x >> _y >> _r >> _h;
cc.setX(_x);
cc.setY(_y);
cc.setR(_r);
cc.setH(_h);
return input;
}
std::ostream & operator<<(std::ostream & os, Cylinder & cc)
{
os << cc.getX() << cc.getY() << cc.getR() << cc.getH() << std::endl;
return os;
}
int main()
{
using namespace std;
Cylinder cc;
cin >> cc;
cout << cc;
return 0;
}
48. 写一个程序,定义抽象类型Shape,由他派生三个类:Circle(圆形),Rectangle(矩形),Trapezoid(梯形),用一个函数printArea分别输出三者的面积,3个图形的数据在定义对象是给定。
#include <iostream>
class Shape
{
public:
virtual double area() const = 0;
};
class Circle:public Shape
{
private:
double r;
public:
Circle(double a):r(a){}
virtual double area() const
{
return 3.14 * r * r;
}
};
class Rectangle:public Shape
{
private:
double h, w;
public:
Rectangle(double a, double b):h(a),w(b){}
virtual double area() const
{
return h * w;
}
};
class Trapezoid:public Shape
{
private:
double h, w;
public:
Trapezoid(double a, double b):h(a), w(b){}
virtual double area() const
{
return 0.5 * h * w;
}
};
void printArea(const Shape & c)
{
std::cout << c.area() << std::endl;
}
int main()
{
Circle c(2);
printArea(c);
Rectangle r(2, 4);
printArea(r);
Trapezoid t(3, 5);
printArea(t);
return 0;
}
49. 定义一个人员类Cperson,包括数据组员:姓名、编号、性别和用于输入输出的组员函数。在此基础上派生出学生类CStudent(增加成绩)和老师类Cteacher(增加教龄),并实现对学生和教师信息的输入输出。
#include <iostream>
class Cperson
{
protected:
char name[10];
int id;
int sex;
public:
virtual void getInfor() = 0;
virtual void printInfor() = 0;
};
class CStudent:public Cperson
{
protected:
int course;
public:
virtual void getInfor()
{
using namespace std;
cout << "Enter the student's inforamtion" << endl;
cout << "Enter the name: ";
cin >> name ;
cout << "Enter the id: ";
cin
展开阅读全文