31.定义盒子Box类,要求具有以下成员:长、宽、高分别为x,y,z,可设置盒子形状;
可计算盒子体积;可计算盒子的表面积。
#include
#include
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;
}
求他们的体积。编一个基于对象的程序,在类中用带参数的构造函数。
#include
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);
}
求他们的体积。编一个基于对象的程序,且定义两个构造函数,其中一个有参数,
一个无参数。
#include
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
using namespace std;
template
class Compare
{public:
Compare(numtype a,numtype b){x=a;y=b;}
numtype max(){return (x>y)?x:y;}
numtype min(){return (x private: numtype x,y; }; int main() {Compare cout< cout< cout< cout< Compare cout< cout< return 0; } 35.建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1,3,5个学生的数据。初值自拟。 #include using namespace std; class Student { public: Student(int n,int s):num(n),score(s){} void display() {cout< 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; p->display(); return 0; } 36.建立一个对象数组,内放5个学生的数据(学号、成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。初值自拟。 #include 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 {max_score=arr[i].score;} cout< } 38.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算 #include 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; } 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 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 class Complex { private: 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<<"("< } 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 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:"< 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< cout< } int main() {Matrix a,b,c; a.input(); b.input(); cout< a.display(); cout< b.display(); c=a+b; //用重载运算符“+”实现两个矩阵相加 cout< c.display(); return 0; } 42.将运算符“+”重载为适用于复数加法,重载函数不作为成员函数,而放在类外, 作为Complex类的友元函数。初值自拟。 #include 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() { 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 #include 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< 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< } 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 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; 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 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;} 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 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 { } }; 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 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() { cout << "Enter the student's inforamtion" << endl; cout << "Enter the name: "; cin >> name ; cout << "Enter the id: "; cin >> id; cout << "Enter the sex (1 or 0 1.men 0.women): "; cin >> sex; cout << "Enter the course:"; cin >> course; } virtual void printInfor() { using namespace std; cout << id << endl; cout << name << endl; cout << sex << endl; cout << course << endl; } }; class Cteacher:public Cperson { protected: int age; public: virtual void getInfor() { using namespace std; cout << "Enter the teacher's inforamtion" << endl; cout << "Enter the name: "; cin >> name ; cout << "Enter the id: "; cin >> id; cout << "Enter the sex (1 or 0 1.men 0.women): "; cin >> sex; cout << "Enter the age:"; cin >> age; } virtual void printInfor() { using namespace std; cout << id << endl; cout << name << endl; cout << sex << endl; } }; int main() { CStudent stu; stu.getInfor(); stu.printInfor(); Cteacher tea; tea.getInfor(); tea.printInfor(); return 0; } 50.定义一个学生类Student做基类,再派生一个Graduate类,学生类有学号、姓名、 和分数,研究生增加工资,它们有同名的函数display(),利用虚函数,编程分别输 出学生和研究生的数据,具体数据自拟。 #include #include using namespace std; class Student { protected: int id; string name; int score; public: Student(int ,string , int); virtual void display(); }; Student::Student(int i, string n, int cr) { id = i; name = n; score = cr; } void Student::display() { //using namespace std;