• C++调试


    C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。cpp文件里的东西都是相对独立的,在编译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次链接(link)就行了。

    应该记住的一点就是,.h头文件中,只能存在变量或者函数的声明, 而不要放定义。即,只能在头文件中写形如:extern int a;和void f();的句子。这些才是声明。如果写上int a;或者void f() {}这样的句子,那么一旦这个头文件被两个或两个以上的.cpp文件包含的话,编译器会立马报错。

    复习一些c++编程内容

    数据的封装:面向对象的指导思想就是以对象为中心,就是要以谁做什么来表达程序的逻辑,要将数据的操作都转化为成员函数的调用。 也就是说,对象在程序中的所有操作,都通过调用自己的函数来完成。

    数据封装的好处:可以对传入的参数加入条件限制。也可以限制某些数据只读不写。

    内联函数:利用关键字inline定义,在编译时,直接将函数体代码和实参代替函数调用语句。类似于直接插入脚本。(结构和逻辑都时比较简单的)

    类内定义:在定义一个类的时候,如果将成员函数的函数体,写在类的内部,这样就称为类内定义。(类内定义的成员函数,编译器会优先将其编译成内联函数)

    类外定义:成员函数的函数体,写在类的外面。分别为同文件类外定义(成员函数虽然定义在类的外面,但和类的定义在同一个文件当中)和分文件类外定义(大型项目和专业程序员都会采用这种定义方式)。在头文件中,定义了类并且声明类的成员函数,在分文件当中定义类的成员函数。必须将头文件包含入分文件中。

    内存分区:

    栈区:所定义的变量就存储在栈区。其特点是内存又系统来进行控制,无论是分配还是回收,都不需要程序员来关心。

    堆区:是用new来分配的内存,这是需要程序员自己来回收的。

    全局区:用来存储全局变量和静态变量。

    常量区:存储一些字符串和常量。

    代码区:存储编译之后的代码。

    对象的初始化:分为两种(1)有且仅有一次的初始化(2)根据条件初始化

    构造函数:用来初始化。将初始化代码写在构造函数内,就可以起到初始化的作用,构造函数在对象实例化时被自动调用(被调用,且仅被调用一次)。初始化函数要与类同名,且构造函数没有返回值,不用写void。在实例化对象时,不需要传递参数的构造函数称为默认构造函数。

    初始化列表:在构造函数中是用,例如

    clas Student 
    {
    public:
        Student():m_strName("Jim"),m_iAge(10){}
    private:
        string m_strName;
        int m_iAge;
    };
    

    初始化列表特性:(1)初始化列表先于构造函数执行(2)初始化列表只能用于构造函数(3)初始化列表可以同时初始化多个数据成员。

    初始化列表的必要性:比如某一个const常量,如何去给其赋值呢,就需要用到初始化列表了。 

    拷贝构造函数:通过同类型的对象实例化另外的对象时,自动调用拷贝构造函数。当没有自定义拷贝构造函数的时候,系统会自动生成一个拷贝构造函数。

    析构函数:用于归还系统资源,收拾最后的残局。释放掉所占用的内存。析构函数不允许传递参数,也就不允许重载。

    析构函数:如果没有自定义析构函数,则系统自动生成一个析构函数。在对象销毁时自动调用。

     头文件中尖括号<>和双引号“”的区别:

    <>尖括号是从默认库中搜索;而“”双引号是从当前文件目录下搜素。

    malloc/free与new/delete的区别:

    不同点:

    1操作对象不同:malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。对于非内部数据类的对象而言,光用maloc/free无法满足动态对象的要求。对啊ing在创建的同时要自动执行构造函数,对象消亡前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限内。所以在构造函数和析构函数的任务中,不能加malloc/free。

    2用法不同:malloc的作用是申明一个定长的内存。注意,其只关注内存的大小,对于类型并没有识别。

    new/delete的功能完全覆盖malloc/free的功能,但是因为C++调用C时不可以使用new/delete,所以依旧保留了malloc/free。

  • 相关阅读:
    leetcode(5)-罗马数字转整数
    leetcode(4)-整数反转
    leetcode(3)-回文数
    leetcode(2)-有效的括号
    leetcode(1)-两数之和
    HTTP基础(一)
    ubuntu 18.04安装MariaDB 10.04并通过远程navicat连接
    ubuntu18.04 root用户登录
    xshell连接ubuntu虚拟机
    ubuntu18.04使用node压缩包的安装及配置
  • 原文地址:https://www.cnblogs.com/han1ning1/p/7084744.html
Copyright © 2020-2023  润新知