首页 > 编程语言 >C++考试题-9道编程题运算符重载带部分答案

C++考试题-9道编程题运算符重载带部分答案

时间:2024-09-25 11:51:48浏览次数:8  
标签:return cout int C++ 考试题 运算符 operator var array

【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

相关文章

  • C++考试题带部分答案函数模板
    【1】写出下面程序的运行结果。#include<iostream>   usingnamespacestd;template<classType1,classType2>classmyclass{public:myclass(Type1a,Type2b){i=a;j=b;}voidshow(){cout<<i<<′′<<j<<′\n′;}private:Type1i;T......
  • C++模拟真人鼠标轨迹
    一.API跨语言平台支持`鼠标轨迹API`[https://winsdk.cn/]()底层实现采用C/C++语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼容性。通过DLL封装,开发者可以在C++、Pytho......
  • 2、A+B(关系运算符,数据类型转换)
    总结关系运算符在其他编程语言中,往往使用==两个等于号表示两个值相等,但是在js中,使用全等运算符===,运算符是关系运算符的一种,用于比较两个值之间是否相等,所以如果想要判定数组长度和1是否相等,可以使用arr.length===1其他关系运算符>:表示大于,比较左侧值是否大于右侧......
  • QT C++ 自学积累 『非技术文』
    QTC++自学积累『非技术文』最近一段时间参与了一个QT项目的开发,使用的是C++语法,很遗憾的是我之前从来没有接触过C++,大学没有开过这堂课,也没用自己学习过,所有说上手贼慢,到现在为止其实也不是很清楚具体的开发技巧,毕竟是参与,东一复制西一粘贴的,就拉倒了。里面用到了很多......
  • 【C++】vector-1
    文章目录1.vector的介绍及使用1.1vector的介绍1.2vector的使用1.2.1vector的定义1.2.2vectoriterator的使用1.2.3vector空间增长问题1.2.4vector增删查改1.vector的介绍及使用1.1vector的介绍1.vector是表示可变大小数组的序列容器。2.就像数组一样,vec......
  • C++模拟真人鼠标轨迹
    一.API跨语言平台支持鼠标轨迹API底层实现采用C/C++语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼容性。通过DLL封装,开发者可以在C++、Python、易语言、按键精......
  • onnxruntime c++ 推理例子
    资源释放的问题。onnxruntime的对象release是无效的,从接口源码上只是将指针赋空。并未实际释放。要实现释放,需要以指针形式实现。一个例子如下:#include<onnxruntime_cxx_api.h>voidtestimage(){Matimage=imread("ae14.jpg",IMREAD_UNCHANGED); //创建会话选项 O......
  • C++: unordered系列关联式容器
    目录1.unordered系列关联式容器1.1unordered_map1.2unordered_set2.哈希概念3.哈希冲突4.闭散列5.开散列博客主页:酷酷学感谢关注!!!正文开始1.unordered系列关联式容器在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到......
  • C++ Practical-1 day6
    系列文章目录点击直达——文章总目录文章目录系列文章目录C++Practical-1day6Overview1.abstract_class抽象类1.1.抽象类的特点1.2.示例:抽象类1.3.注意事项2.virtual_function虚函数2.1.示例:动物叫声的多态性2.2.示例:计算图形的面积2.3.注意事项关于作者C+......
  • 自梳理C++八股
    1.左右值引用的理解回答:“左右值引用是C++11引入的一项重要特性,用于优化资源管理和提升性能。具体来说:左值引用(LvalueReference):左值引用可以类比为对象的别名,它允许多个引用共享一个实体对象,常用于函数参数传递以避免对象拷贝。左值引用只能绑定到一个命名的持久对象,适合用......