您的位置:首页 > 编程语言 > C语言/C++

20161220C++阶段班02_C to C++_01bool/头文件/域作用符/new/delete/重载

2017-01-11 17:16 225 查看

bool:

C++是支持原生bool的!

    在C语言中,我们使用bool类型,必须用到stdbool.h文件,他是使用宏的方式定义了true和false,这并非原始bool,是使用替代品代替的。

    C++中的bool才符合真正bool的意义,0为false,非0为true!原生bool是小写的bool,bool有很多种!宏定义都是int类型的。

        BOOL(也非原生bool),_Bool(C98标准后加上的,等同于bool),等。bool是原生的(0和非0),其他的都是通过0和1来实现的!建议一直使用bool,只有bool这是最安全的!

头文件的三种标准:

    #include <iostream>,这个库不以.h结尾,后缀名适用于区分使用,不加.h里面的内容也是一样的。
    C++是从C语言发展而来的,里面有几个标准:1:.h结尾的,就是从C继承来的。2:前面前缀c(eg:#include <cstdio>),也是从C继承过来的,但是这个符合C++标准,他和stdio.h里面基本一样,只是cstdio符合C++标准。使用C语言的标准库应该使用cstdio。3:标准C++库(#include
<iostream>)。

预编译头:

    建立文件的时候改为cpp格式,这样,软件会调用C++的编译器来编译。

    新建工程的时候,如果没点击空项目,VS默认会加上stdafx.h和stdafx.c,预编译头。他是VC所特有的,即windows下所特有的(给链接器使用)!可以没有他,以后建立工程就选空项目,预编译头是想给你提供便利,但一般是我们不需要的,也是不被C++标准承认的!

域作用符:::

  全局变量和局部变量名可以相同,不会重定义,如果在函数内调用全局变量就可以用::
eg:
int num = 100;
int main()
{
int num = 10;
int sum = num+::num;}

  第二个num就是调用的全局的,::前面没加东西就是指全局空间,加了的话就是指调用的对应命名空间里面的函数!
  printf是C语言函数,C++中是std::cout<<num;(后面没有endl也可以)。他后面可以接不同类型的数据!
  一个变量非常重要的还有生命周期,C语言对生命周期控制很弱,命名空间也相当于作用域。

new&delete:

C语言中,如果在堆上面来操作的时候,使用的是两个函数:malloc/free,C++中添加了new/delete。

eg:
int main()
{
int *pNum = new int(100);//分配一个int类型,并将其值设置成100.
std::cout<<*pNum;
int *pArray = new int[10];//new数组
delete  pNum;
delete[] pArray;
return 0;}


new/delete是一个运算符,不是一个函数

Overloaded:

重载:

  函数名可以相同,只要里面参数类型,或者类型的顺序,个数不同就不会出现函数重定义的错误,调用的时候编译器会自动判断调用哪个函数。如果函数相同,参数也相同,就会出现重定义错误。调用的时候看起来是一个函数,但实际上是多个不同的函数,也放在不同的空间。
  cout也是函数重载来做的!
  编译后这些函数是不同的,放在不同的内存空间,编译器做一一匹配,编译器会保存符号表,他通过记录了函数里面的参数类型,然后进行匹配就可以得到对应的函数。
例如:
    统一把MyCout()记录成MyCout@char()、MyCout@int()……在后面加。通过命名粉碎的机制把每个函数编的不同来实现的。
  命名粉碎后,在自己的工程下调用没问题,但别人调用的时候就不知道具体的函数名,可用加上extern "C",不让其命名粉碎,以C语言的编译方式编译。

  两个函数完全一样,但返回值不同的时候,不可以构成重载!重载只与函数名和参数有关,实际的还会加上类,命名空间等信息进去,以后会讲,这里不深究!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: