zoukankan      html  css  js  c++  java
  • C++学习(二)

    九、
    3.内联
    1)编译器用函数的二进制代码替换函数调用语句,减少函数调用的时间开销。这种优化策略成为内联。
    2)频繁调用的简单函数适合内联,而稀少调用的复杂函数不适合内联。
    3)递归函数无法内联。
    4)通过inline关键字,可以建议编译对指定函数进行内联,但是仅仅是建议而已。
    inline void foo (int x, int y){...}
    十、C++的动态内存分配
    malloc/calloc/realloc/free
    1.new/delete:对单个变量进行内存分配/释放
    2.new[]/delete[]:对数组进行内存分配/释放
    十一、引用
    1.引用即别名。
    int a = 20;
    int& b = a; // int* b = &a;
    b = 10; // *b = 10;
    cout << a << endl; // 10
    2.引用必须初始化。
    int a;
    int* p;
    a = 20;
    p = &a;
    int& b; // ERROR !
    int& b = a; // OK
    3.引用一旦初始化就不能再引用其它变量。
    int a = 20, c = 30;
    int& b = a;
    b = c; // c => b/a
    4.引用的应用场景
    1)引用型参数
    a.修改实参
    b.避免拷贝,通过加const可以防止在函数中意外地修改实参的值,同时还可以接受拥有常属性的实参。
    2)引用型返回值
    int b = 10;
    int a = func (b);
    func (b) = a;
    从一个函数中返回引用往往是为了将该函数的返回值作为左值使用。但是,一定要保证函数所返回的引用的目标在该函数返回以后依然有定义,否则将导致不确定的后果。
    不要返回局部变量的引用,可以返回全局、静态、成员变量的引用,也可以返回引用型形参变量本身。
    5.引用和指针
    1)引用的本质就是指针,很多场合下引用和指针可以互换。
    2)在C++层面上引用和指针存在以下不同:
    A.指针式实体变量,但是引用不是实体变量。
    int& a = b;
    sizeof (a); // 4
    double& d = f;
    sizeof (d); // 8
    B.指针可以不初始化,但是引用必须初始化。
    C.指针的目标可以修改,但是引用的目标的不能修改。
    D.可以定义指针的指针,但是不能定义引用的指针。
    int a;
    int* p = &a;
    int** pp = &p; // OK
    int& r = a;
    int&* pr = &r; // ERROR
    E.可以定义指针的引用,但是不能定义引用的引用。
    int a;
    int* p = &a;
    int*& q = p; // OK
    int& r = a;
    int&& s = r; // ERROR
    F.可以定义指针的数组,但是不能定义引用的数组。
    int a, b, c;
    int* parr[] = {&a, &b, &c}; // OK
    int& rarr[] = {a, b, c}; // ERROR
    可以定义数组的引用。
    int arr[] = {1, 2, 3};
    int (&arr_ref)[3] = arr; // OK
    十二、显示类型转换运算符
    C:目标类型变量 = (目标类型)源类型变量;
    1.静态类型转换
    static_cast<目标类型> (源类型变量)
    如果在目标类型和源类型之间某一个方向上可以做隐式类型转换,那么在两个方向上都可以做静态类型转换。反之如果在两个方向上都不能做隐式类型转换,那么在任意一个方向上也不能做静态类型转换。
    int* p1 = ...;
    void* p2 = p1;
    p1 = static_cast<int*> (p2);
    char c;
    int i = c;
    如果存在从源类型到目标类型的自定义转换规则,那么也可以使用静态类型转换。
    2.动态类型转换
    dynamic_cast<目标类型> (源类型变量)
    用在具有多态性的父子类指针或引用之间。
    3.常类型转换
    const_cast<目标类型> (源类型变量)
    给一个拥有const属性的指针或引用去常
    const int a = 100;
    const int* p1 = &a;
    *p1 = 200; // ERROR
    int* p2 = const_cast<int*> (p1);
    *p2 = 200; // OK
    4.从解释类型转换
    reinterpret_cast<目标类型> (源类型变量);
    在不同类型的指针或引用之间做类型转换,以及在指针和整型之间做类型转换。
    5.目标类型变量 = 目标类型(源类型变量);
    int a = int (3.14);
    十三、C++之父的建议
    1.少用宏,多用const、enum和inline
    #define PAI 3.141519
    const double PAI = 3.14159;
    #define ERROR_FILE -1
    #define ERROR_MEM  -2
    enum {
      ERROR_FILE = -1,
      ERROR_MEM = -2
    };
    #define max(a,b) ((a)>(b)?(a):(b))
    inline int double max (double a, double b) {
      return a > b ? a : b;
    }
    2.变量随用随声明同时初始化。
    3.少用malloc/free,多用new/delete。
    4.少用C风格的强制类型转换,多用类型转换运算符。
    5.少用C风格的字符串,多用string。
    6.树立面向对象的编程思想。
    ++C
    第二课  类和对象
    一、什么是对象
    1.万物皆对象
    2.程序就是一组对象,对象之间通过消息交换信息
    3.类就是对对象的描述和抽象,对象就是类的具体化和实例化
    二、通过类描述对象
    属性:姓名、年龄、学号
    行为:吃饭、睡觉、学习
    类就是从属性和行为两个方面对对象进行抽象。
    三、面向对象程序设计(OOP)
    现实世界                 虚拟世界
    对象    -> 抽象 -> 类 -> 对象
    1.至少掌握一种OOP编程语言
    2.精通一种面向对象的元语言—UML
    3.研究设计模式,GOF
    四、类的基本语法
    1.类的定义
    class 类名 {
    };

    class Student {
    };
    2.成员变量——属性
    class 类名 {
      类型 成员变量名;
    };

    class Student {
      string m_name;
      int    m_age;
    };
    3.成员函数——行为
    class 类名 {
      返回类型 成员函数名 (形参表) {
        函数体;
      }
    };

    class Student {
      string m_name;
      int    m_age;
      void eat (const string& food) {
        ...
      }
    };
    4.访问控制属性
    1)公有成员:public,谁都可以访问。
    2)私有成员:private,只有自己可以访问。
    3)保护成员:protected,只有自己和自己的子类可以访问。
    4)类的成员缺省访控属性为私有,而结构的成员缺省访控属性为公有。

  • 相关阅读:
    Data type
    Backup &recovery备份和还原
    spring AOP Capability and Goals
    CDI services--Scope(生命周期)&&EL.(Sp El)
    CDI services--Event(事件)
    CDI services--interceptors(拦截器)
    CDI services--Decorators(装饰器)
    javaEE Design Patter(2)设计模式
    Http协议详解
    PRESCAN_DISCTANCE_ROBOT_INOUT_TOO_BIG
  • 原文地址:https://www.cnblogs.com/fanghui/p/3323186.html
Copyright © 2011-2022 走看看