^.
1、编写一个程序,要求:
(1)生明一个类Complex(复数类),定义类Complex的两个对象c1和c2,对象c1通过构造函数直接指定复数的实部和虚部(类私有数据成员为double类型:real和imag)为2.5及3.7,对象c2通过构造函数直接指定复数的实部和虚部为4.2及6.5;
(2)定义友元运算符重载函数,它以c1、c2对象为参数,调用该函数时能返回两个复数对象相加操作;
(3)定义成员函数print,调用该函数时,以格式“real+imag i”输出当前对象的实部和虚部,例如:对象的实部和虚部分别是4.2和6.5,则调用print函数输出格式为:4.2+6.5 i;
(4)编写主程序,计算出复数对象c1和c2相加结果,并将其结果输出。
#include
using namespace std;
class Complex
{
public:
Complex(double r=0.0,double i=0.0);
friend Complex operator+ (Complex& a,Complex& b);
void printf();
private:
double real;
double imag;
};
Complex::Complex(double r,double i)
{
real=r;
imag=i;
}
Complex operator+ (Complex& a,Complex& b)
{
Complex temp;
temp.real=a.real+b.real;
temp.imag=a.imag+b.imag;
return temp;
}
void Complex::printf()
{
cout<0)
cout<<"+";
if(imag!=0)
cout<
using namespace std;
class Time
{
public:
Time(int h=0,int m=0,int s=0);//构造函数
Time operator+(Time &);//运算符重载函数,实现两个时间的相加
void disptime();//显示时间函数
private:
int hours;
int minutes;
int seconds;
};
Time::Time(int h,int m,int s)
{
hours=h;
minutes=m;
seconds=s;
}
Time Time::operator+(Time& t)
{
int h,m,s;
s=(t.seconds+seconds)%60;
m=(minutes+t.minutes+(t.seconds+seconds)/60)%60;
h=hours+t.hours+(minutes+t.minutes+(t.seconds+seconds)/60)/60;
hours=h;
minutes=m;
seconds=s;
return *this;
}
void Time::disptime()
{
cout<>h ;
cin>>m ;
cin>>s ;
while(m<0||m>59||s<0||s>59)
{
cout<<"******时间输入错误!请重新输 !******\n";
cout<<"输入时间 : ";
cin>>h ;
cin>>m ;
cin>>s ;
}
}
int main()
{
int h1,m1,s1,h2,m2,s2;
Input(h1,m1,s1);
Input(h2,m2,s2);
Time A(h1,m1,s1),B(h2,m2,s2);
A=A+B ;
A.disptime();
return 0;
}
3、用友元运算符函数或成员运算符函数,重载运算符“+”、“-”、“*”,实现对实验二中实现的矩阵类的对象的加、减、乘法。
#include
#define hang 2
#define lie 2
class Matrix
{
private:
int Row;
int Column;
int MATRIX[hang][lie];
public:
Matrix(int r,int c)
{
Row=r;
Column=c;
}
Matrix() {}
void TypeMatrix();
void Print() const;
Matrix& operator = (const Matrix& rhs);
Matrix operator + (const Matrix& rhs);
Matrix operator - (const Matrix& rhs);
};
void Matrix::TypeMatrix()
{
std::cout<<"请输入矩阵:"<>MATRIX[i][j];
}
}
}
void Matrix::Print() const
{
std::cout<<"矩阵的结果为:"<MATRIX[g][h]=rhs.MATRIX[g][h];
}
}
}
return *this;
}
Matrix Matrix::operator + (const Matrix& rhs)
{
int i,j;
for(i=0;iMATRIX[i][j]+rhs.MATRIX[i][j];
}
}
return *this ;
}
Matrix Matrix::operator - (const Matrix& rhs)
{
int i,j;
for(i=0;iMATRIX[i][j]-rhs.MATRIX[i][j];
}
}
return *this ;
}
int main()
{
Matrix a,b,c,d;
a.TypeMatrix();
b.TypeMatrix();
c=a+b;
c.Print();
d=a-b;
d.Print();
}
4、编写一个程序,用于进行集合的和、并和交运算。例如输入整数集合{9,5,4,3,6,7}和{2,4,6,9},计算出他们进行集合的并、差和交运算后的结果。
【提示】
(1)可以用一下表达式实现整数集合的基本运算:
s1+s2 两个整数集合的并运算
s1-s2 两个整数集合的差运算
s1*s2 两个整数集合的交运算
(2)参考以下Set类的框架,用于完成集合基本运算所需的各项功能。
class Set
{
public:
Set();
void input(int d);//向集合中添加一个元素
int length();//返回集合中的元素个数
int getd(int i);//返回集合中位置i的元素
void display();//显示集合的所有元素
Set operator+(Set s1);//成员运算符重载函数,实现集合的并运算
Set operator-(Set s1);//成员运算符重载函数,实现集合的差运算
Set operator*(Set s1);//成员运算符重载函数,实现集合的交运算
Set operator=(Set s1);//成员运算符重载函数,实现集合的赋值运算
protected:
int len;//统计结合中元素的个数;
int s[MAX];//存放集合中的元素
};
#include
using namespace std;
const int MAX = 50;
class set
{
public:
set();
void input(int d);
int length();
int getd(int i);
void disp();
set operator+(set s1);
set operator-(set s1);
set operator*(set s1);
set operator=(set s1);
protected:
int len;
int s[MAX];
};
set::set()
{
len = 0;
//s ={0};
cout << "***建立一个集合***\n";
}
void set::input(int d)
{
len = d;
cout << "输入集合元素" << d <<" 个:";
for(int i = 0; i < d; i++ )
cin >> s[i] ;
}
int set::length()
{
int n=0;
while(s[n] != \0)
{
n++;
}
return n;
}
int set::getd(int i)
{
return 0;
}
void set::disp()
{
for (int i = 0; i < len; i++)
cout << s[i] << " ";
//cout << endl;
}
set set::operator+(set s1) //------------------------并运算----------------
{
//strcat(s,s1.s);
for (int i = 0; i < len; i++)
{
for(int j = 0; j < s1.len; j++) //在s1.s[]中选出不相同的
{
if(s[i] == s1.s[j]) //选出相同的元素删掉得到s1.s与s不同的元素
{
for (;j < s1.len; j++)
s1.s[j] = s1.s[j+1];
--s1.len;
}
}
}
for (int j = 0;j < s1.len; j++ ) // 将s1.s[]中不相同的加在s[]后面
{
s[len] = s1.s[j];
len++;
}
s[len+s1.len] = \0;
return *this;
}
set set::operator-(set s1) //------------------------差运算------------------
{
int t;
for (int i = 0; i < s1.len; i++)
{
for(int j = 0; j < len; j++)
{
if(s1.s[i] == s[j] ) //选出s与s1.s中相同的元素并且删除掉
{
t = j;
for (;t < len; t++)
s[t] = s[t+1];
--len;
}
}
}
return *this;
}
set set::operator*(set s1) // -------------------交运算----------------------
{
int m[MAX];
int l = 0;
for (int i = 0; i < s1.len; i++)
{
for(int j = 0; j < len; j++) // 选出相同的元素
{
if(s1.s[i] == s[j])
{
m[l] = s[j];
l++;
}
}
}
for (i = 0; i < l; i++)
s[i] = m[i];
s[l] = \0;
len = l;
return *this;
}
set set::operator=(set s1)
{
for (int i = 0; i < s1.length(); i++)
s[i] = s1.s[i];
len = s1.len;
return *this;
}
int main()
{
int n;
set C;
set A;
cout << "建立含有几个元素的集合:";
cin >> n;
A.input(n);
set B;
cout << "建立含有几个元素的集合:";
cin >> n;
B.input(n);
cout << endl;
cout << "两集合的差集(A - B)为:";
C = A - B;
C.disp();
cout << endl;
/*
cout << "两集合的交集(A * B)为:";
C = A * B;
C.disp();
cout << endl;
*/
/*
cout << "两集合的并集(A + B)为:";
C = A + B;
C.disp();
cout << endl;
*/
return 0;
}
……………………说明分别分开运行……………………
6、写一个程序,定义抽象类Container:
class Container
{
protected:
double radius;
public:
Container(double r);//抽象类Container的构造函数
virtual double surface_area()=0;//纯虚函数surface_area
virtual double volume()=0;//纯虚函数volume
};
【要求】
建立3个继承Container的派生类:Sphere(球体)、Cylinder(圆柱体)、Cube(正方体),让每一个派生类都包含虚函数surface_area()和volume(),分别用来球体、圆柱体和正方体的表面积和体积。要求写出主程序,应用C++的多态性,分别计算边长为6.0的正方体、半径为5.0的球体,以及半径为5.0和高为6.0的圆柱体的表面积和体积。
#include
#include
using namespace std;
class container
{
protected:
double radius;
public:
container(double radius1);
virtual double surface_area()=0;
virtual double volume()=0;
};
container::container(double radius1)
{
radius=radius1;
}
//派生类cube、sphere与cylinder
class cube : public container
{
public:
cube(double radius1):container( radius1 ){}
virtual double surface_area();
virtual double volume();
};
double cube :: surface_area()
{
return 6*radius*radius;
}
double cube :: volume()
{
return radius*radius*radius;
}
class sphere : public container
{
public:
sphere(double radius1):container( radius1 )
{}
virtual double surface_area();
virtual double volume();
};
double sphere :: surface_area()
{
return 4*3.14*radius*radius;
}
double sphere :: volume()
{
return 4.0/3.0*3.14*radius*radius*radius;
}
class cylinder : public container
{
protected:
double high;
public:
cylinder(double high1,double radius1):container(radius1)
{high=high1;
}
virtual double surface_area();
virtual double volume();
};
double cylinder :: surface_area()
{
return 2*3.14*radius*radius+2*3.14*high*radius;
}
double cylinder :: volume()
{
return 3.14*radius*radius*high;
}
int main()
{
container *p;
cube cc(6.0);
sphere ss(5.0);
cylinder cy(6.0,5.0);
p=&cc;
cout<<"正方体的表面积:"<surface_area()<volume()<surface_area()<volume()<surface_area()<volume()<
展开阅读全文
相关搜索