北京大学C++程序设计coursera课程第四周编程填空题3

题目

填空题-3

1 point possible (graded)

总时间限制:
1000ms
内存限制:
65536kB
描述

写一个二维数组类 Array2,使得下面程序的输出结果是:

0,1,2,3,

4,5,6,7,

8,9,10,11,

next

0,1,2,3,

4,5,6,7,

8,9,10,11,

程序:

#include <iostream>
#include <cstring>
using namespace std;
// 在此处补充你的代码
int main() {
    Array2 a(3,4);
    int i,j;
    for(  i = 0;i < 3; ++i )
        for(  j = 0; j < 4; j ++ )
            a[i][j] = i * 4 + j;
    for(  i = 0;i < 3; ++i ) {
        for(  j = 0; j < 4; j ++ ) {
            cout << a(i,j) << ",";
        }
        cout << endl;
    }
    cout << "next" << endl;
    Array2 b;     b = a;
    for(  i = 0;i < 3; ++i ) {
        for(  j = 0; j < 4; j ++ ) {
            cout << b[i][j] << ",";
        }
        cout << endl;
    }
    return 0;
}
输入
输出
0,1,2,3,
4,5,6,7,
8,9,10,11,
next
0,1,2,3,
4,5,6,7,
8,9,10,11,
样例输入
样例输出
0,1,2,3,
4,5,6,7,
8,9,10,11,
next
0,1,2,3,
4,5,6,7,
8,9,10,11,

答题:

#include <iostream>

#include <cstring>

using namespace std;

class Array2

{

  int *ptr;

  int row;//行数

  int col;//列数

public:

  Array2(int a,int b):row(a),col(b)

  {

    ptr=new int[row];

    for(int i = 0 ; i < row; i++)

    {

      ptr[i] = reinterpret_cast<int>(new int[col]); //把int* 转化成int

    }

  }

  Array2(){ptr=NULL;row=0;col=0;}

  ~Array2()

  {

    for(int i = 0 ; i < row; i++)

    {

      delete []reinterpret_cast<int*>(ptr[i]);

    }

    delete []ptr;

  }

  int* operator[](int a)

  {

    return reinterpret_cast<int*>(ptr[a]);

  }

  Array2& operator =(const Array2 &k)

  {

    if(ptr==k.ptr) return *this;

    if(ptr!=NULL)

    {

      for(int i = 0 ; i < row; i++)

      {

        delete []reinterpret_cast<int*>(ptr[i]);

      }

    delete []ptr;

    }

    if(k.ptr==NULL)

    {

      ptr=NULL;

      row=0;

      col=0;

      return *this;

    }

    ptr=new int[k.row];

    row=k.row;

    col=k.col;

    for(int i = 0 ; i < row; i++)

    {

      ptr[i] = reinterpret_cast<int>(new int[col]);

    }

    for(int i = 0 ; i < row; i++)

    for(int j = 0 ; j < col; j++)

      {(reinterpret_cast<int*>(ptr[i]))[j]=(reinterpret_cast<int*>(k.ptr[i]))[j];}

    cout<<"done"<<endl;

    return (*this);

  }

  int& operator()(int a,int b)

  {

    return (*this)[a][b];

  }

};

int main()

{

  Array2 a(3,4);

  int i,j;

  for( i = 0;i < 3; ++i )

  for( j = 0; j < 4; j ++ )

    a[i][j] = i * 4 + j;

  for( i = 0;i < 3; ++i )

  {

    for( j = 0; j < 4; j ++ )

    {

      cout << a(i,j) << ",";

    }

    cout << endl;

  }

  cout << "next" << endl;

  Array2 b;

  b = a;

  for( i = 0;i < 3; ++i )

  {

    for( j = 0; j < 4; j ++ )

    {

      cout << b[i][j] << ",";

    }

    cout << endl;

  }

  return 0;

}

核心难点是双[]运算符怎么重载出来,思想是第一个[]中放地址,然后第二个[]就可以用默认的寻址运算,这样只需要对第一个[]进行重载。

实现的过程中注意运用reinterpret_cast即c++的类型转换。

原文地址:https://www.cnblogs.com/xuhaoforwards/p/9248638.html

时间: 2024-08-22 15:15:35

北京大学C++程序设计coursera课程第四周编程填空题3的相关文章

20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结

20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: 需求分析 功能要求 1.自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能) 可生成不同等级题目,类似于: 1级题目:2 + 5 =: 10 - 5 = 之类的两个数,一个运算符的题目 2.题目运算(判题) 可独立使用 实现中缀表达式转为后缀表达式并计算 判断用户答题正误,并输出正确结果 3.支持真分数 可独立使用 实现分数算式的

2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算

2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算 组内成员 20172327 马瑞蕃 20172320 李闻洲 20172317 蒋子行 需求分析 自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能) 可生成不同等级题目 不同等级的题目应该指的是不同难度的题目,意味着题目的复杂程度随着等级的上升而上升 题目运算(判题) 可独立使用 实现中缀表达式转为后缀表达式并计算 自动生成的题目要先转为后缀表达式,并计算这个后缀表达式 判断用户答题正误,并输出正

20172312『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

20172312『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172315 20172318 姓名 :胡智韬 陆大岳 伙伴第一周博客地址: 对结对伙伴的评价:这俩人一开始各编各的还好,到后面就开始吵,从头吵到尾,陆大胖,胡志汪,还好到最后是把代码敲出来了,不容易不容易. 小组结对编程的照片(QQ群截图) 项目中自己负责的部分 代码的综合整理,错误查找,合并以及博客的撰写. 个人贡献度划分 彭霖:胡智韬:陆大岳=3:3:4 相关过程的截图 生成题目类驱动类的

2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周

2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周 博客要求 组内同学需各自发表博客 博客中需包含以下内容: 相关过程截图 关键代码解释 遇到的困难及解决方法 写出项目中自己负责的部分 个人贡献度划分(按百分比给小组各成员划分贡献度,各成员贡献之和为100%) 对结对的小伙伴做出评价给出小伙伴博客链接(重点指出需要改进的地方) 给出项目的码云链接 给出小组结对编程照片 博客内容中如需展示团队的共同成果,请进行说明 如有参考或引用的设计.实现,请进行说

20172325『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结

20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号:20172306 姓名:刘辰 结对伙伴博客链接 刘辰同学对编程的积极程度很高,并且在编程能力上很不错,有自己的想法并且能够把这个想法具体的实践出来,只是在编程的过程中和同学交流不够,总是在最后不行了才发现问题,很容易造成前功尽弃,希望在编程过程中多沟通,减少不必要的时间精力的浪费. 小组结对编程照片 项目中自己负责的部分 我负责的是两个部分,分别是: 1.利用栈将中缀表达式转后缀表达式: 2.对后缀表

2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-最后阶段

2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-最后阶段 最后的一周,时间越来越紧张,因为之前的拖沓和一些事情的耽误,导致了如今的紧张,这一周应该是我们小组效率最高的一周,因为放下了很多事情开始补充一些关于四则运算编程的一些东西. 结对编程的战友 20172316 赵乾宸:负责对于整数出题的编程: 20172319 唐才铭:负责对于分数出题的编程: 20172329 王文彬:负责对于计算和题目去重的编写: 测试为分别进行测试,最后由赵乾宸进行集体测试. 每个人

20172312『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结

20172312『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结 结对伙伴 学号 :20172315 20172318 姓名 :胡智韬 陆大岳 伙伴第一周博客地址: 对结对伙伴的评价:这俩人一开始各编各的还好,到后面就开始吵,从头吵到尾,陆大胖,胡志汪,还好到最后是把代码敲出来了,不容易不容易. 小组结对编程的照片(QQ群截图) 项目中自己负责的部分 代码的综合整理,错误查找,合并以及博客的撰写. 个人贡献度划分 彭霖:胡智韬:陆大岳=3:3:4 相关过程的截图 生成题目类驱动类的

20145331《Java程序设计》课程总结

20145331<Java程序设计>课程总结 每周读书笔记链接汇总 •20145331<Java程序设计>第一周学习总结 •20145331<Java程序设计>第二周学习总结 •20145331<Java程序设计>第三周学习总结 •20145331<Java程序设计>第四周学习总结 •20145331<Java程序设计>第五周学习总结 •20145331<Java程序设计>第六周学习总结 •20145331<Java

20155336 2016-2017-2《Java程序设计》课程总结

20155336虎光元<Java程序设计>课程总结 一.每周作业 第一周学习总结:http://www.cnblogs.com/hxl681207/p/6457919.html 第二周学习总结:http://www.cnblogs.com/hxl681207/p/6507102.html 第三周学习总结:http://www.cnblogs.com/hxl681207/p/6539379.html 第四周学习总结:http://www.cnblogs.com/hxl681207/p/65802