首页 > 代码库 > PoEdu - C++阶段班- Lesson02_C to C++

PoEdu - C++阶段班- Lesson02_C to C++

技术分享

 

 


 

1  原生bool类型

技术分享

 

  c++里面的bool类型才是真正原生的true和faul,比如常见的大写的“BOOL”,它就不是原生的。

原生的与非原生的bool,它们的区别:

技术分享

详细说下原生bool与非原生bool之间的差别:

技术分享

_Bool 这个是c98之后加上的bool类型,和我们原生bool等同。

技术分享

C++中,建议一直使用原生bool,它是最安全的类型。

补充一点:宏定义一个int类型的bool,之所以这么做,是因为0是false,1是true,在C++中,这种比对是有风险的,可以说是不正确的。

技术分享

 

 

 


 

2 头文件的三种标准

    在vs2015上默认建立一个项目,VS2015帮我们生成4个文件:

技术分享

stdafx.h这个是微软给我们的一个大坑。

 技术分享

有可能会导致一个问题:预编译头会导致平台不兼容。

文件后缀cpp和c,编译器会选择不同的编译方式编译。

在以DomainOperatorDemo这个解决方案命名的工程中,生成的DomainOperatorDemo.cpp,有程序员直接改名为main.cpp。告诉别人main方法在这里。

在stdafx.h中,默认包含了3个头文件。我们可以直接在main函数中使用printf()。

技术分享

其中还包含了tchar.h,这是微软给我们的一个坑,它是windows特定的头文件,它前面有个t,带有很强的平台特性。不要过于依赖这个头文件。

  技术分享

以c++中,stdio.h和cstdio功能一样。

 

技术分享

 

 技术分享

3 补充预编译头:提问stdafx.cpp具体的作用是什么呢?

    可以理解为微软的VC特有的文件,实际上我们可以完全的没有它,直接创建空项目。是给编译器用的,并不是我们所需要的。预编译头,想是给我们一定的便利,但并没有什么卵用。

 


 

4  域运算符  

它的作用主要就是来解决一件事:

 

技术分享

 

 看示例: 

技术分享

变量不是最终的本质,本质是内存里的表述数据。

 技术分享

 技术分享

 作用域访问符::

技术分享

变量的覆盖原则:就近访问。谁最近,我就去找它。

技术分享

命名空间与作用域:

  在C语言中,我们了解到,变量的生命周期和作用域,就是看这个变量放在哪,外部的、全局的、局部的,局部的局部的等,在C中对变量的作用域控制力是很弱的。

  所以在C++中,特意加入了一个权限概念:命名空间,加强了作用域的控制。除了全局空间,栈空间,又多了一个自已定义的命名空间。

技术分享

 当域作用符前面为空的时候,表示为全局空间,域作用符前面有名称的,就是命名空间

std是个什么样子的命名空间?看图:

技术分享

如何自定义一个命名空间:

技术分享

自定义命名空间除了解决变量重定义的问题,它还有其它的作用吗?答案是有的:工业编程里面,大的项目是很多程序员合作的结果,当另一个伙伴想要访问你一个同名的变量时,命名空间就能很好的分隔区分它们。

 


 

5  new&delete    运算符

 技术分享

  前面讲到了全局,讲到了栈,现在说说“堆”:

c中我们学到2个操作函数是 malloc()  和  free()。C++中间添加了new 和 delete ;

#include <iostream>

int main()
{
    int *pNum = new int(100);
    std::cout << *pNum;

    return 0;
}

运行:100

在C语言中maloc()一定和free()对应使用,那么C++中也是:new一定对应delete使用。

#include <iostream>

int main()
{
    int *pNum = new int(100);
    std::cout << *pNum;
    delete pNum;
    return 0;
}

运行:100

 再看:如果new一个数组呢,怎么释放?

#include <iostream>

int main()
{
    int *pNum = new int(100);
    std::cout << *pNum;
    
    int *pArray = new int[10];
    
    delete pNum;
    delete[] pArray;
return 0;
}

运行:100

注意:new  和  delete  是运算符,它们不是函数。重要的说三遍!老师就在课堂里强调了三次。

 


 

PoEdu - C++阶段班- Lesson02_C to C++