【1】写出下列程序的运行结果。
#include<iostream>
using namespace std;
class A {
public:
A(int i):x(i)
{ }
A()
{ x=0;
}
friend A operator ++(A a);
friend A operator --(A &a);
void print();
private:
int x;
};
A operator++(A a)
{ ++a.x;
return a;
}
A operator --(A &a)
{ --a.x;
return a;
}
void A::print()
{ cout<<x<<endl;
}
int main()
{ A a(7);
++a;
a.print();
--a;
a.print();
return 0;
}
【2】写出下列程序的运行结果。
#include<iostream>
using namespace std;
class Words{
public:
Words(char *s)
{ str=new char[strlen(s)+1];
strcpy(str,s);
len=strlen(s);
}
void disp();
char operator[](int n); //定义下标运算符“[]”重载函数
private:
int len;
char*str;
};
char Words::operator[](int n)
{ if (n<0||n>len-1) //数组的边界检查
{ cout<<"数组下标超界!\n";
return ' ';
}
else
return *(str+n);
}
void Words::disp()
{ cout<<str<<endl;
}
int main()
{ Words word("This is C++ book.");
word.disp();
cout<<"第1个字符:";
cout<<word[0]<<endl; //word[0]被解释为word.operator[](0)
cout<<"第16个字符:";
cout<<word[15]<<endl;
cout<<"第26个字符:";
cout<<word[25]<<endl;
return 0;
}
【3】写出下列程序的运行结果。
#include<iostream>
using namespace std;
class Length {
int meter;
public:
Length(int m)
{ meter=m;
}
operator double()
{ return (1.0*meter/1000);
}
};
int main()
{ Length a(1500);
double m=float(a);
cout<<"m="<<m<<"千米"<<endl;
return 0;
}
【4】 写出下列程序的运行结果。
#include<iostream>
using namespace std;
class Array{
public:
Array(int);
int& operator()(int); //重载运算符()
private:
int *m;
int x;
};
Array::Array(int x)
{ this->x=x;
m=new int[x];
for(int i=0;i<x;i++)
*(m+i)=i;
}
int& Array::operator()(int x1)
{ return(*(m + x1));
}
int main( )
{ cout<<"\n\n";
Array a(10);
cout<<a(5);
a(5)=7;
cout<<endl<<a(5);
return 0;
}
【5】编一个程序,用成员函数重载运算符“+”和“-”将两个二维数组相加和相减,要求第1个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。
【解】 实现本题功能的程序如下:
#include<iostream>
#include<iomanip>
using namespace std;
const int row=2;
const int col=3;
class array {
public:
array(); //构造函数
array(int a,int b,int c,int d,int e,int f);
void get_array( ); //由键盘输入数组的值
void display(); //显示数组的值
array operator+(array &X); //将两个数组相加
array operator-(array &X); //将两个数组相减
private:
int var[row][col];
};
array::array()
{ for(int i=0; i<row; i++)
for(int j=0;j<col; j++)
var[i][j]=0;
}
array::array(int a,int b,int c,int d,int e,int f)
{ //由构造函数设置数组的值
var[0][0]=a;
var[0][1]=b;
var[0][2]=c;
var[1][0]=d;
var[1][1]=e;
var[1][2]=f;
}
void array::get_array( ) //由键盘输入数组的值
{ cout<<"Please input 2*3 dimension data:"<<endl;
for (int i=0; i<row; i++)
for (int j=0;j<col; j++)
cin>>var[i][j];
}
void array::display() //显示数组的值
{ for (int i=0; i<row;i++)
{ for (int j=0;j<col;j++ )
cout<<setw(5)<< var[i][j];
cout<<endl;
}
}
array array::operator+(array &X) //将两个数组相加
{ array temp;
for (int i=0;i<row; i++)
for(int j=0;j<col;j++)
temp.var[i][j]=var[i][j]+X.var[i][j];
return temp;
}
array array::operator-(array &X) //将两个数组相减
{ array temp;
for (int i=0; i<row; i++)
for (int j=0; j<col; j++ )
temp.var[i][j]=var[i][j]-X.var[i][j];
return temp ;
}
int main()
{ array X(11,22,33,44,55,66);
array Y,Z;
Y.get_array();
cout<<"Display object X"<<endl;
X.display();
cout<<"Display object Y"<<endl;
Y.display();
Z=X+Y;
cout<<" Display object Z=X+Y"<<endl;
Z.display();
Z=X-Y;
cout<<" Display object Z=X-Y"<<endl;
Z.display();
return 0;
}
【6】修改上题,用友元函数重载运算符“+”和“-”将两个二维数组相加和相减。
【解】实现本题功能的程序如下:
#include<iostream>
#include <iomanip>
using namespace std;
const int row=2; const int col=3;
class array {
public:
array(); //构造函数
array(int a,int b,int c,int d,int e,int f);
void get_array( ); //由键盘输入数组的值
void display(); //显示数组的值
friend array operator+(array &X,array &Y); //将两个数组相加
friend array operator-(array &X,array &Y); //将两个数组相减
private:
int var[row][col];
};
array::array()
{ for (int i=0; i<row; i++)
for (int j=0;j<col; j++)
var[i][j]=0;
}
array::array(int a,int b,int c,int d,int e,int f)
{ // 由构造函数设置数组的值
var[0][0]=a; var[0][1]=b; var[0][2]=c;
var[1][0]=d; var[1][1]=e; var[1][2]=f; }
void array::get_array( ) //由键盘输入数组的值
{ cout<<" Please input 2*3 dimension data: "<<endl;
for (int i=0; i<row; i++)
for (int j=0;j<col; j++)
cin>>var[i][j];
}
void array::display() //显示数组的值
{ for (int i=0; i<row;i++)
{ for (int j=0;j<col;j++ )
cout<<setw(5)<< var[i][j];
cout<<endl;
}
}
array operator+(array &X,array &Y) //将两个数组相加
{ array temp;
for (int i=0;i<row; i++)
for (int j=0;j<col;j++)
temp.var[i][j]=Y.var[i][j]+X.var[i][j];
return temp;
}
array operator-(array &X,array &Y) //将两个数组相减
{ array temp;
for (int i=0; i<row; i++)
for (int j=0; j<col; j++ )
temp.var[i][j]=X.var[i][j]-Y.var[i][j];
return temp ;
}
int main()
{ array X(11,22,33,44,55,66);
array Y,Z;
Y.get_array();
cout<<"Display object X"<<endl; X.display();
cout<<"Display object Y"<<endl; Y.display();
Z=X+Y;
cout<<" Display object Z=X+Y"<<endl; Z.display();
Z=X-Y;
cout<<" Display object Z=X-Y"<<endl; Z.display();
return 0;
}
【7】编写一个程序,要求:
1.声明一个类complex,定义类complex的两个对象cl和c2, 对象cl通过构造函数直接指定复数的实部和虚部(类私有数据成员为double类型的real和imag)为2.5及3.7,对象c2通过构造函数直接指定复数的实部和虚部为4.2及6.5;
2. 定义友元运算符重载函数,它以 cl、c2对象为参数,调用该函数时能返回两个复数对象相加操作;
3. 定义成员函数print,调用该函数时,以格式“(real,imag)”输出当前对象的实部和虚部,例如:对象的实部和虚部分别是4.2和6.5,则调用print函数输出格式为:(4.2,6.5);
4.编写主程序,计算出复数对象c1和c2相加结果,并将其结果输出。
【解】实现本题功能的程序如下:
#include<iostream>
using namespace std;
class complex{
public:
complex(double r=0,double i=0);
friend complex operator+(const complex c1,const complex c2);
void print() ;
private:
double real,imag;
};
complex::complex(double r,double i)
{ real=r;
imag=i;
}
complex operator+(const complex c1,const complex c2)
{ complex temp;
temp.real=c1.real+c2.real;
temp.imag=c1.imag+c2.imag;
return temp;
}
void complex::print()
{ cout<<" ("<<real<<", "<<imag<<") "<<endl;
}
int main()
{ complex c1(2.5,3.7),c2(4.2,6.5);
complex c;
c=c1+c2;
c.print();
return 0;
}
【8】为Date类重载“+” 运算符,实现在某一个日期上(月、日、年)加一个天数。Date类如下:
class Date{
public:
Date(){ }
Date(int m,int d,int y)
{ month=m;
day=d;
year=y;
}
void print()
{ cout<<year<<"."<<month<<"."<<day<<endl;
}
Date operator +(int);
private:
int month,day,year;
};
【解】实现本题功能的程序如下:
#include<iostream>
using namespace std;
class Date{
public:
Date(){ }
Date(int m,int d,int y)
{ month=m;
day=d;
year=y;
}
void print()
{ cout<<year<<"."<<month<<"."<<day<<endl;
}
Date operator +(int);
private:
int month,day,year;
};
static int days[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
int isleap(int year)
{ if ((year%4==0&&year%100!=0)||(year%400==0))
return 1;
else
return 0;
}
Date Date::operator+(int n)
{ int leap;
leap=0;
leap=isleap(this->year);
n+=this->day;
while (n>days[leap][this->month-1])
{ n-=days[leap][this->month-1];
if (++(this->month)==13)
{ this->month=1;(this->year)++;
leap=isleap(this->year);
}
}
this->day=n;
return *this;
}
int main()
{ Date d1(2,15,2000),d2;
d1.print();
d2=d1+365;
d2.print();
return 0;
}
【9】 定义一个矩阵类Matrix,重载运算符"+",使之能用于矩阵的加法运算。有两个矩阵a和b,均为2行4列。求两个矩阵之和。重载流插入运算符"<<"和流提取运算符">>",使之能用于该矩阵的输入和输出。
【解】实现本题功能的程序如下:
#include<iostream>
using namespace std;
class Matrix{
public:
Matrix();
friend Matrix operator+(Matrix&,Matrix&); //声明重载运算符"+"
friend ostream& operator<<(ostream&,Matrix&); //声明重载运算符"<<"
friend istream& operator>>(istream&,Matrix&); //声明重载运算符">>"
private:
int mat[2][4];
};
Matrix::Matrix()
{ for(int i=0;i<2;i++)
for(int j=0;j<4;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<4;j++)
{ c.mat[i][j]=a.mat[i][j]+b.mat[i][j]; }
return c;
}
istream& operator>>(istream& in,Matrix& m) //定义运算符">>"的重载函数
{ cout<<"input value of matrix:"<<endl;
for(int i=0;i<2;i++)
for(int j=0;j<4;j++)
in>>m.mat[i][j];
return in;
}
ostream& operator<<(ostream& out,Matrix& m) //定义运算符"<<"的重载函数
{ for(int i=0;i<2;i++)
{ for(int j=0;j<4;j++)
{ out<<m.mat[i][j]<<" ";}
out<<endl;
}
return out;
}
int main()
{ Matrix a,b,c;
cin>>a; //用cin输入矩阵a
cin>>b; //用cin输入矩阵b
cout<<"Matrix a:"<<endl<<a<<endl; //用cout输出矩阵a
cout<<"Matrix b:"<<endl<<b<<endl; //用cout输出矩阵b
c=a+b;
cout<<"Matrix c=Matrix a + Matrix b:"<<endl<<c<<endl;//用cout输出矩阵c
return 0;
}
标签:return,cout,int,C++,考试题,运算符,operator,var,array From: https://blog.csdn.net/workflower/article/details/142448038