zoukankan      html  css  js  c++  java
  • c++学习笔记_1

    前言:本笔记所对应的课程为中国大学mooc中北京大学的程序设计与算法(三)C++面向对象程序设计,主要供自己复习使用

    第一章 从c到c++

    引用

    1. 定义引用时一定要将其初始化成某个变量
    2. 引用从一而终,引用一个变量后不可再引用另一个变量
    3. 只能引用变量
    4. 引用可以作为函数的返回值
    5. 常引用,在前面加关键字const,不能用过常引用去修改其引用的内容,但是可以通过直接修改引用内容的方式修改
    6. 常引用和引用不是同一种类型。引用可以赋值给常引用,常引用和常量不可以赋值给引用。

    总结:将引用想象成变量的别名,可更好的理解其性质。

    示例:

    //引用作为参数的实例。可实现和指针类似的效果,达到在函数中改变传入变量的目的
    //交换函数的写法
    void swap(int & n1, int & n2){
        int temp;
        temp = n1;
        n1 = n2;
        n2 = temp;
    }
    
    //引用作为函数返回值的实例。可以将变量传回,而不是仅传回一个值
    int & get(int * a, int i){
        return a[i];
    }
    
    int main(){
        int * a = {1, 2, 3};
        get(a, 1) = 10;
        cout << a[1] << endl;
        //此时输出的值为10
    }
    

    const关键字

    1. 用法一:定义常量const int const double
    2. 用法二:定义常量指针const int * 同样的,不可以通过常量指针修改其指向的内容,但是可以改变指针的指向;不可以把常量指针赋值给非常量指针,反之可以。
    3. 用法三:定义常引用
    4. 将常量指针设为函数参数,可避免函数内部不小心改变参数指针所指的内容。

    动态内存分配

    1. new用法一:分配一个变量 P = new T;,意为:P是一个T型指针,分配一块sizeof(T)大小的内存空间,然后将其起始地址赋值给P。
    2. new用法二:分配一个数组 P = new T[N];,意为:N是要分配的数组元素的个数,可以是表达式。
    3. new运算符返回值T *
    4. delete用法一:delete P;,P是一块new分配出的存储空间
    5. delete用法二:delete [] P;
    6. 一块储存空间不能被delete两次及以上

    内联函数

    为减少函数调用的开销(主要是为减少语句很少且调用次数很多的函数的调用开销),引入函数内联机制,实际运行时直接将函数体语句块插入调用语句处。使用inline关键字定义内联函数。

    示例:

    inline int max(int a, int b){
        if(a > b) return a;
        return b;
    }
    

    函数重载

    多个函数名字相同,参数个数参数类型不同,叫做函数重载。用法同java中的重载,不再赘述。

    再次强调,两个函数参数表完全相同,只是返回值不同,不叫函数重载。

    函数缺省参数

    定义函数时可以让最右边的连续若干个参数有缺省值,调用时若省略最右边连续若干个参数,则使用其对应的缺省值。

    意义在于提高程序的可扩充性。

    示例:

    void func(int a, int b = 1, int c = 2);
    func(10);
    func(10, 3);
    func(10, , 8);
    

    其中第一个等价于 func(10, 1, 2);
    第二个等价于func(10, 3, 2);
    第三个错误,只能从右边开始连续缺省

    对象与类

    由于学过java,因此这里只记录与java不同的地方。

    类与对象的用法有三种:
    第一种同java。

    第二种是指针->成员名的形式。

    示例:

    Circle c1, c2;
    Circle * p1 = & c1;
    Circle * p2 = & c2;
    p1->w = 5;
    p2->Init(5, 4);
    

    第三种是引用名.成员名的形式。

    示例:

    Circle c;
    Circle & cc = c;
    cc.w = 5;
    cc.Init(5, 4);
    
  • 相关阅读:
    TreeSet集合的add()方法的源码解析
    Ubuntu下定时任务和自启动任务的部署
    基于Django的独立运行脚本开发
    python做量化交易干货分享
    使用Glide以及OkHttp集成
    Redis实现简单消息队列
    Linux下高并发socket最大连接数
    Ubuntu14.04部署pyspider的过程
    pymongo "ServerSelectionTimeoutError: No servers found yet" 错误的解决
    gitolite服务器部署中的一些坑
  • 原文地址:https://www.cnblogs.com/fyunaru/p/11298408.html
Copyright © 2011-2022 走看看