美文网首页
博览网--C++面向对象高级编程(上)-- C++学习第二周笔记

博览网--C++面向对象高级编程(上)-- C++学习第二周笔记

作者: 曹伟大 | 来源:发表于2017-10-24 06:51 被阅读0次

    一、拷贝构造, 拷贝赋值, 析构

      Class 带指针 , 必须有拷贝构造和拷贝赋值函数

    1) 拷贝构造函数: 

            浅拷贝:只拷贝指针

             深拷贝:创建空间并将数据拷贝过去, 拷贝指针及相关内容

             拷贝赋值及处理过程

                1) 检查是否自我赋值;

                2) 删掉本身的空间;

                3)重新创建空间;

                4)进行拷贝; 

    2) 析构函数:

            实现一些清理工作

    二、 堆栈内存管理

     1) 栈和堆的区别:

           栈离开作用域 scope 后死亡, 而堆不会。 

    2) 常用关键字:

            static  / global 声明周期

            new: 先申请内存, 再调用构造函数

            delete: 先调用析构函数, 再释放内存

            VS编译器 : 使用new delete 会增加一个 cookie 结构用于存放申请内存的大小及目前的状态, 是申请还是释放

             delete[] 告诉编译器数组对象需要要对所有的对象进行析构, 针对包含指针的类会造成内存泄漏

    三   扩展:

     1) static: 

               static函数没有this指针, 可以处理static 数据, 

               static变量要在类外面进行定义, 在类里面是声明

               调用静态函数的方法

                     (1) 通过object 调用

                     (2) 通过class name 调用

     2) 单件的创建:  

            (1)构造函数放到private, 可以使得外界无法创建该类对象;

            (2)通过静态函数创建并获取唯一的数据;

    3)  cout, ostream 

              对操作符<<重载,   可以输出多种类型

    4) 其他  

         类模板, 函数模板

         namespace

    operator type() const;

    explicit complex();

    pointer-like object

    function-like object

    namespace

    template specialization

    stardard library

    variadic template  (C++11)

    move ctor  (C++11)

    Rvalue reference (C++11)

    auto(C+11)

    lambda(C++11)

    range-base for loop(C++11)

    unordered containers(C++11)

    习题编译报错: 

    1. rectangle.h:61:51: error: ‘Rectangle& operator=(const Rectangle&)’ must be a nonstatic member function

    inline Rectangle& operator=(const Rectangle& other) {

    没有类的定义  改为 Rectangle& Rectangle;:operator=(const Rectangle&) 通过

    相关文章

      网友评论

          本文标题:博览网--C++面向对象高级编程(上)-- C++学习第二周笔记

          本文链接:https://www.haomeiwen.com/subject/xtapuxtx.html