第一章 C++基础概念

以下是本人整理的C++基础知识点,内容并不包含全面的C++知识,只是对C++重点内容、特点进行整理和归纳。

思维导图链接:https://www.mubucm.com/doc/KSdgrTXfTS

1.1 命名空间(Namespace)

作用
	 申明一个命名空间,在里面定义变量、函数、类,typedef,宏等
	 减少命名冲突

使用
    用法1:域解析操作符 ::
    用法2:using 关键字声明

使用注意
	推荐在函数内部声明 std,减少命名冲突的风险

1.2 新版和旧版 C++ 标准库头文件

新版产生原因
    C++命名空间的引入,产生了新版 C++ 标准库

新旧版区别
    旧版
        .h格式结尾,官方不支持使用
            iostream.h

        定义的所有符号位于全局作用域

    新版
        不以.h结尾,在旧版基础上稍加修改而来,官方支持,更加强大和灵活
            iostream

        标准库定义的所有符号位于命名空间 std 中

1.3 C++输入输出和iostream

头文件iostream
    包含了用于输入输出的对象:cin、cout、cerr等

cout 和 cin 
    都是 C++ 的内置对象,而不是关键字
    由标准库的开发者提前创建好

<< 和 >> 运算符
    重载过的运算符,用于对不同类型的数据进行输入输出

1.4 C++布尔类型(bool)

true 表示“真”,false 表示“假”

存储、输出 bool 变量的值,还是数字 1 和 0 

1.5 C和C++中的const

const变量的存储区别
    C和C++:占用内存,可使用&获取得地址

const变量的用法区别
    编译阶段
        C:拷贝const变量内存中的数据,将数据赋值给其它变量
        C++:直接将const变量的值赋值给其它变量
            值替换,更宏行为类似

    执行阶段
        C:const变量被修改后再对外赋值,数值发生变化
        C++:const变量被修改后再对外赋值,数值不发生变化
            因为赋值过程只存在于在编译过程


const变量的作用范围区别
    C:作用域是当前文件,对其他文件可见,extern声明后可使用
    C++:作用域是当前文件,对其他文件不可见,不能extern

1.6 new和delete运算符

new 和 malloc()的区别
    同:都在堆区分配内存,必须手动释放
    异: new 和 delete 管理内存,可以自动调用构造函数和析构函数

用法
    new:动态分配内存
        int *p = new int;
        int *q = new int[10];

    delete :释放内存
        delete p;
        delete [] q;

1.7 inline内联函数

特点
    在编译时,将函数调用处用函数体代码替换
    消除函数调用的时空开销,提高效率
    产生多份相同的函数拷贝,增大代码体积
     inline 声明只是程序员对编译器提出的一个建议,编译器会自行判断是否执行

2个作用
    消除函数调用时的开销
    取代带参数的宏

用法
    在函数定义开头的增加 inline 关键字
        inline void swap(int *a, int *b){......}

    不应该在函数声明处 inline
        在函数声明处添加 inline 关键字无效,会被编译器忽略
        使用者没必要知道是否为内联函数

    内联函数比较短小,通常会省略函数的声明

内联函数代替宏
    宏
        不会计算参数,直接粘贴

    内联函数
        先计算实参,再将结果传递给形参


普通函数和内联函数的区别
    普通函数
        占用虚拟地址空间
        函数调用时产生入栈出栈操作
        多文件编程时,函数的声明和定义应该分开

    内联函数
        编译后不存在,不占用虚拟地址空间
        
        内联函数可以定义在头文件中
            编译完成后内联函数就不存在了,链接时不会引发重复定义错误

        多文件编程时,内联函数的声明和定义要在同一个文件中,否则分散到不同的文件中会出错

1.8 C++函数的默认参数

特点
    默认参数只能放在形参列表的最后
        实参和形参的传值是从左到右依次匹配的

    同一个作用域(或文件)中,一个函数形参只能指定一次默认参数
        函数定义和声明在同一个文件中的时候,不能同时指定默认参数
        编译器使用的是当前作用域中的默认参数
        同一个作用域中,一个函数可以声明多次,但形参的默认参数依然只能指定一次


作用
    定义函数时,可以给形参指定一个默认值,调用函数时,可以不给形参赋值(省略赋值),直接使用默认值
    减少要定义的析构函数、方法以及方法重载的数量

1.9 C++函数重载详解

介绍
    函数名相同,参数列表(参数签名)不同
        参数的类型、参数的个数和参数的顺序不同,参数列表不同


本质
    函数重载仅仅是语法层面的,本质上它们还是不同的函数,占用不同的内存,入口地址也不一样

函数重载的底层原理
    编译时:对函数重命名
        void Swap(int a, int b) --> _Swap_int_int() //例

    函数调用时:重载决议
        根据传入的实参去逐个匹配


函数重载过程的二义性和类型转换
    原因
        实参的类型和形参的类型不一致

    类型转换:向上转换
        short --> int
        float--> double

1.10 实现C++和C的混合编程

修改函数在h文件的声明方式
    例子myfun.h
		#ifdef __cplusplus
		extern "C" void display();
		#else
		void display();
		#endif
    myfun.h 被引入到 C++ 程序中:extern "C" void display();
    myfun.h 被引入到 C 语言程序中:void display();

extern "C"的作用

    extern "C" void fun() 
    告诉C++编译器,这是C函数,在.c文件中
    在C++编译环境下,以C的方式编译函数fun(),这样链接阶段就能找到函数原型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值