C++ | 期末复习 (中大版)

期末考试前matirx(dddd)开放了部分题库,考完物理和数分后索性开刷,挑战两天干完。不会出现整块的大知识点,只是有一些细节方面要注意的留在这里,不想最后考试在简单的语法问题上浪费时间

随机掉落知识点

  1. 静态成员变量的使用:在类的内部声明static int count ,在类的外部初始化int typename::count = value,通过类的成员函数进行直接操作(成员函数不是static可以操作static数据);即可以通过类访问也可以通过对象来访问。(这一点在考试的时候就忘记了痛失两分…)
    而静态成员函数呢就可以访问静态成员(本质是因为静态成员函数没有this指针,找不到对象在哪里),在类外部进行函数实现的时候也是return_type class_name::fun_name(){}

    // class Player
    // {
    // public:
    //     Player(int id);
    //     ~Player();
    //     int getId();
    //     static int getNumberOfObjects(); 
     
    // private:
    //     int id;
    //     static int numberOfObjects; //count the number of Student objects
    // };在这里插入代码片
    #include<Player.hpp>
    #include<iostream>
    using namespace std;
    int Player::numberOfObjects = 0;
    Player::Player(int id):id(id){ numberOfObjects++;}
    Player::~Player(){numberOfObjects--;}
    int Player::getId(){ return id; }
    int Player::getNumberOfObjects(){
        return numberOfObjects;
    } //count the number of Student objects
    
    
    
  2. 关于matrix系统:编写类一般有两个方法,一是在类的内部直接实现,二是在类的外部通过解析符::实现。有的时候matrix就要求用解析符(人在屋檐下

  3. 关于new和delete:在对类内部的数组等数据结构进行初始化时用到nen开辟空间时,一定要注意this的问题。比如形式参数是name实际参数也是name,如果写成了name = new name [10] ,那么由于内存泄漏,导致segmentfault

  4. 类的定义时如果写了const 那么在函数实现的时候也必须要加上const。例如int getX() const; //类的内部 后面实现的时候int getX () const{ return X }

  5. 关于const:即便是函数参数中的const,也是read-only的,如果尝试修改一般报错为assignment of read-only reference 'x'

  6. 输出格式问题:如果输出“看样子”和目标输出一样,但是没有通过test,那么一定是复制粘贴的时候出了问题。检查一下,或者甚至直接重新复制。

  7. 默认参数:默认参数只在类的声明的时候写,类定义的时候不写(外部定义)。

  8. ++--的运算符重载:首先前加无参数,后加有参数;其次前加返回引用,后加返回值即可。因为前加可以作为左值进行操作,比如

    int a = 1;
    ++a = 3;
    //a++ = 3直接报错:error: lvalue required as left operand of assignment
    cout<<a<<endl;
    

    a的结果应该是3,因为传出来的值是可以继续当作左值被修改的。

  9. 关于map:map的遍历方式依旧是for(auto it = my_map.begin(); it != my_map.end()); it++) ,map的查找如果失败的话返回值是my_map.end()

  10. small but vital tips! 多重遍历的时候,一不小心两层都是for i了…然后debug大半天…十分痛苦;大小写和单词拼写每次都会有一些小问题…

  11. 动态二维数组:用new来动态分配空间,直接给出例子,比如我要一个n,m的矩阵。如何分配空间呢?int** mat = new int* [row] 首先让二维指针指向一个数组,数组中存储的是指针变量。然后进入for(int i=0;i<row;i++)循环,对于每一行mat[row] = new int [col]申请int类型的数组。
    创建了之后销毁也同样需要注意,由于先后创建的依赖关系,需要后创建的先销毁。所以首先(=for(int i=0; i<row; i++) 对于每一次循环 delete [] mat[i]注意这里是对row进行循环,而不是对col,不然内存会出问题,matrix的报错常常莫名其妙…最后delete [] mat 完成销毁。

  12. 递归/循环:一定要记得更新下一次递归或者循环的位置。比如递归代入下一次的值,循环更新循环点数值。不然就是原地转圈了噢!

  13. 名称空间和extern:extern声明使用其他文件中的变量。如果是全局范围,那么某个命名空间内的函数也是可以使用的。在命名空间外实现命名空间内的函数时,需要加上space_name::

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值