程序设计复习

程序设计复习

函数与递归

  1. 不是类成员的函数是全局函数

  2. 函数原型 (声明)确定:函数名、返回类型、形参数目、形参类型、形参顺序。其中函数名和形参类型合称为 函数签名

  3. 函数原型的一大特征是 实参类型强制转换 。从高类型到低类型的转换可能会产生错误(例如精度丢失)。

  4. 随机数 的产生需要头文件cstdlib。其中:
    rand()函数用于产生随机数(rand()%n实现比例缩放)
    srand(time(0))通过读取当前时间设置随机数种子

  5. 枚举类型enum 中存在枚举常量显示设置和隐式设置值的情况。
    enum Months{JAN=1,FEB,MAR...}其中FEB会隐式设置为2。
    enum Days{FIR,SEC,THR...}这里的FIR会隐式设置为0。

  6. C++提供了5个 存储类别说明符autoregisterexternmutablestatic
    其中autoregister自动存储类别说明符 ,说明标识符的存活时间是标识符出现到程序块执行完毕。register说明符建议编译器在计算机高速硬件寄存器中而不是在内存中存储该变量,但是上述步骤可以由编译器自己完成。
    其中externstatic静态存储类别说明符 ,说明在全局范围内的全局静态变量可以访问。声明为static的局部变量仍然具有局部作用域。

  7. 内联函数inline 让编译器直接在函数调用处将函数调用语句替换为相应的函数定义,避免编译器到处寻找函数定义位置。

  8. 函数名相同、形参不同的情况可以通过 函数重载overloading 实现。重载函数通过 函数签名 区分。

  9. 递归与迭代都是基于 控制语句 实现的,但是:
    递归是选择结构;迭代是循环结构。


指针

  1. 指针变量:将内存地址作为值。 指针可以被声明为指向任何对象

  2. 初始化指针 时,0和NULL是等价的。

  3. 定义指针时, *运算符 应该和变量名放在一起:int *ptr

  4. 使用const修饰指针的意义:const int *const ptr中前一个const说明 指针指向的数据是常量 不可修改,而后一个const说明 指针本身是一个常量 不可更改。

  5. 基于指针的字符串都是以 空字符 \0结尾的。


运算符重载

  1. 运算符的重载函数一般声明为 友元friend

  2. 运算符重载的 语法格式 如下:
    ostream &operator<<(ostream &, const Student &)
    bool operator!(const string &)

  3. 使用new进行 动态内存分配 的结构是在 自由存储区heap 中创建对象和数组。

  4. 关键字explicit 用于禁止不应被允许的由转换构造函数完成的隐式类型转换。


面向对象编程的3大特性

  1. 封装encapsulation
    封装是指将数据和函数集合在一个抽象数据类型中。
    意义:

    • 保护或防止代码和数据被破坏或篡改;
    • 通过代码重用降低软件开发复杂度;
    • 封装解决命名冲突。

  2. 继承Inheritance
    继承是指一个类通过得到另外一个类的内部数据结构来实现对该类概念的具体化
    意义:

    • 重用代码,节省开发时间;
    • 增强类之间的关系;
    • 为多态性做准备。

  3. 多态polymorphism
    多态是指作用于不同对象的同一操作(函数)可以拥有不同的解释( 函数执行语句 )并 产生不同的执行结果
    多态分为编译时多态和运行时多态。
    编译时多态 体现为 函数重载 。好处是编译速度更快。
    运行时多态 体现为 虚成员函数 。好处是提供更好的代码灵活性和抽象性。
    多态存在的条件:

    • 存在继承;
    • 子类重写了父类的方法;
    • 父类引用指向子类对象。


模板

  1. 函数模板

    template<typename T>
    void function(const T *const array, int count)
    {
        //implementation
    }
    
  2. 类模板

    template<typename T>
    class Stack{
        public:
            Stack();
            ~Stack();
        private:
            vector<T> data;
    };
    
  3. 注意模板与继承之间的存在的联系(490页)


I/O流

  1. 获取特定输入内容:

    • get函数
    • getchar函数
    • getline函数

  2. 输出流操作符

    • 设置整数流的基数:decocthexsetbase()
    • 浮点精度:cout.precision(n)setprecision(n)
    • showpoint设置打印尾数零。
    • (更多详见课本)

异常处理

  1. 语法结构

    try{
        //logic sentences to be tested
        if(logic error){
            throw Exception();
        }
    }
    catch(Exception exception){
        //related operation
    }
    
  2. 注意catch语句执行的层次调用。


文件处理

  1. 文件对象的语法结构

    ofstream outfile("filename",ios::out);
    ifstream infile("filename",ios::in);
    

    其中,ios::out和ios::in是文件处理的模式,如下表所示:

    • ios::app在文件末尾进行添加;
    • ios::ate打开文件,把光标移至文件尾部,是添加模式;
    • ios::in标准读入模式;
    • ios::out标准输出模式;
    • ios::trunc输出覆盖已有内容,是ios::out默认设置;
    • ios::binary打开文件进行二进制输入或输出。

结构体

  1. 结构体的定义

    struct StructName{
        int id;
        string name;
        ...
    };
    
  2. 需要注意结构体的内存对齐问题。

  3. 使用typedef可以自定义类型名称。

    typedef int myInt; //此时myInt是int类型的别名
    myInt number = 6;  //number变量其实就是int类型  
    
  4. str转其他类型

    • atoi()字符串转int类型;
    • atof()字符串转float类型;
    • atod()字符串转double类型;
    • strtol()字符串转long类型。

  5. string字符串处理

    • strcpy函数与strncpy函数:字符串复制
    • strcat函数与strncat函数:字符串拼接
    • strcmp函数与strncmp函数:字符串比较
    • strtok函数:字符串按字符进行分割
    • strlen函数:求字符串长度

  6. 其他字符串函数详见课本687页。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值