• MFC视频教程(孙鑫)学习笔记2-掌握C++


    这一集中,主要总结了C++经典语法与应用。

    1. C++的三大特性:封装、继承、多态。

    2. C++中提供了一套输入输出流类的对象,它们是cin 、cout和cerr,对应c语言中的三个文件指针stdin、stdout、stderr,分别指向终端输入、终端输出和标准出错输出(也从终端输出)。cin与>>一起完成输入操作,cout、cerr与<<一起完成输出与标准错误输出。利用cin和cout比C语言中的scanf和printf要方便得多,cin和cout可以自动判别输入输出数据类型而自动调整输入输出格式,不必像scanf和printf那样一个个由用户指定。使用cin,cout不仅方便,而且减少了出错的可能性。对于输出来说,我们像以上方式调用就可以了,对于输入来说,我们以如下方式调用即可:
    int i;
    cin>>i;

    注意箭头的方向。在输出中我们还使用endl(end of line),表示换行,注意最后一个是字符‘l’,而不是数字1,endl相当于C语言的' ',表示输出一个换行。 

    3.  C++中结构中可以包含函数,与类区别是它默认为public。 在C语言中,结构不能包含函数。

    4.  构造函数:

    C++构造函数,每个类必须包含构造函数,构造函数的作用是创建对象本身,分配内存。没有构造函数,就不能创建对象

    C++又规定,如果一个类没有提供任何的构造函数,则C++提供一个默认的构造函数(由C++编译器提供),这个默认的构造函数是一个不带参数的构造函数,它只负责创建对象,而不做任何的初始化工作。 
    只要一个类定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,C++就不再提供默认的构造函数。也就是说,如果为一个类定义了一个带参数的构造函数,还想要无参数的构造函数,则必须自己定义。 
    (与C#一样的)

    5. 析构函数:

    当一个对象生命周期结束时,其所占有的内存空间就要被回收,这个工作就由析构函数来完成。 

    析构函数是“反向”的构造函数,析构函数不允许有返回值,更重要的是析构函数不允许带参数,并且一个类中只能有一个析构函数。 

    析构函数的作用正好与构造函数相反,对象超出其作用范围,对应的内存空间被系统收回或被程序用delete删除时,析构函数被调用。

      根据析构函数的这种特点,我们可以在构造函数中初始化对象的某些成员变量,给其分配内存空间(堆内存),在析构函数中释放对象运行期间所申请的资源。 

    6. 函数重载:

       重载构成的条件:函数的参数类型、参数个数不同,才能构成函数的重载。 (在C#中又称函数签名)


    7.  this指针

    this指针是一个隐含的指针,它是指向对象本身,代表了对象的地址this = &classname

    一个类所有的对象调用的成员函数都是同一代码段。那么成员函数又是怎么识别属于同一对象的数据成员呢?原来,在对象调用pt.output(10,10)时,成员函数除了接受2个实参外,还接受到了一个对象s的地址。这个地址被一个隐含的形参this指针所获取,它等同于执行this=&pt。所有对数据成员的访问都隐含地被加上前缀this->。例如:x=0; 等价于 this->x=0。 


    8. 类的继承
    继承的权限,public,protected,private。构造函数的初始化,需要继承父类的构造函数


    9. 函数的覆盖
    函数的覆盖是发生在父类与子类之间,函数的重载是发生在类内部


    10. C++的虚函数,
    纯虚函数,子类必须实现的函数
    virtual void breathe = 0;


    11. C++的引用与指针的区别
    int a = 6;
    int &b = a;
    引用和指针变量的内存模型
    引用不需要占用内存,指针变量本身占用内存,存放变量地址,引用是变量的一个别名,通常用于函数传递参数。


    // 引用传参
    void change(int &a,int &b)
    {
    int tmp = a;
    a = b;
    b= tmp;
    }
    change(a,b);


    // 指针传参
    void change(int* pA,int* pB)
    {
    int tmp = *pA;
    *pA = *pB;
    *pB = tmp;
    }
    change(&x,&y);



    11. 类重复定义问题:


    #ifndef POINT_H
    #define POINT_H
    class Point
    {};
    #endif


    12. vc++程序编译链接原理及过程

    预处理->编译->链接


    封装、继承、多态。当一个对象生命周期结束时,其所占有的内存空间就要被回收,这个工作就由析构函数来完成。 
    2、析构函数是“反向”的构造函数,析构函数不允许有返回值,更重要的是析构函数不允许带参数,并且一个类中只能有一个析构函数。 C++又规定,如果一个类没有提供任何的构造函数,则C++提供一个默认的构造函数(由C++编译器提供),这个默认的构造函数是一个不带参数的构造函数,它只负责创建对象,而不做任何的初始化工作。 
    4、只要一个类定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,C++就不再提供默认的构造函数。也就是说,如果为一个类定义了一个带参数的构造函数,还想要无参数的构造函数,则必须自己定义。 

    封装、继承、多态。

  • 相关阅读:
    java学习笔记
    androd Sdk manager配置
    50ms延时程序
    89c51中断入口地址表
    打印杨辉三角--队列的应用
    栈的应用--括号匹配
    哈夫曼编码---数据压缩
    PS转手绘
    数据结构学习思路
    第三届蓝桥杯省赛---第39级台阶
  • 原文地址:https://www.cnblogs.com/AlexanderZhao/p/12879004.html
Copyright © 2020-2023  润新知