homework-06

首先贴出智能指针的作业

1. 了解Lambda的用法

计算“Hello World!”中

a.字母‘e’的个数
b. 字母‘l’的个数
void main(){
    char c[] = "Hello World";
    int e = 0;
    [&]()
    {
        int i = 0;
        while (i < 11)
        {
            if (c[i++] == 'e')
                e++;
        }
    }();
    printf("e:%d
", e);
    int l = 0;
    [&]()
    {
        int i = 0;
        while (i < 11)
        {
            if (c[i++] == 'l')
                l++;
        }
        return l;
    }();
    printf("l:%d
", l);
    system("pause");
}

2. 练习使用智能指针

  打印“Hello World!”循环右移n位的结果

  Example:

    n = 1, output = “!Hello World”

  n = 3, output = “ld!Hello Wor”

void main(){
    int n;
    cin >> n;
    auto sp1 = std::make_shared<string>("Hello World!");
    auto sp2 = std::make_shared<string>("Hello World!");
    int i = 0;
    int i2;
    while (i < 12)
    {
        i2=(i + n) % 12;
        (*sp2)[i2] = (*sp1)[i++];
    }
    sp1.reset();
    cout << *sp2;
    system("pause");

}

然后是作业06

1) 把程序编译通过, 跑起来。

    读懂程序,在你觉得比较难懂的地方加上一些注释,这样大家就能比较容易地了解这些程序在干什么。

     把正确的 playPrev(GoMove) 的方法给实现了。 如果大家不会下围棋,那就需要大家实地或者上网练习一下围棋的死活,提子是怎么回事。这个应该一个小时就能搞定。

注释放在github的代码中,请自行查看。主要的方法是要看研究明白原来是如何存储的,从doDeadGroup中我们能知道新的下棋操作会带来的新情况,当前的棋子颜色,次序等等都要改变。然后如果有吃子的现象就会生成一个数组来储存吃掉的子的信息,这样当我们写playPrev时只需要把这些信息搞懂,然后重新写入棋盘,并把当前的一些状态值设成上一步的即可。

2)根据你选择的教材 (三本之一或更多),点评一下这个程序设计方面的不足,例如:

     编码风格,

     程序架构,有哪些不符合良好的设计,这个程序的设计模式 (MVC等) 是高端大气国际化的么? 等等。 

     程序的错误处理,文件处理,UI 等等

我对这个程序的理解就是,有非常多的没用的参数和没用的代码没有注释掉只是在那里放着,这样会非常影响阅读,倒是很多东西摸不到头绪,浪费了很多时间。所有的处理都放到几个大类中,比如操作,棋子,棋谱等东西分开写会更有利与维护。在读取文件的时候也咩有考虑得很周全,try-catch的格式从来没使用或,程序的安全性很低。

原文地址:https://www.cnblogs.com/jazzone/p/3441132.html