C++学习笔记第二天:几个知识点

简介: 第一天,囫囵吞枣的把C++的基本概念撸了一遍 有几个地方不太理解,今天有针对性的学习一下   1、namespace 自定义命名空间,主要为了解决类、函数和全局变量的命名冲突问题。 调用某个命名空间里的符号时,需要使用格式:命名空间::符号名称 #include using na...

第一天,囫囵吞枣的把C++的基本概念撸了一遍

有几个地方不太理解,今天有针对性的学习一下

 

1、namespace

自定义命名空间,主要为了解决类、函数和全局变量的命名冲突问题。

调用某个命名空间里的符号时,需要使用格式:命名空间::符号名称

#include <iostream>
using namespace std;
namespace first
{
  int var = 5;
}

namespace second
{
  double var = 3.1416;
}

int main () {
  cout << first::var << endl;
  cout << second::var << endl;
  return 0;
}

结果是
5
3.1416
两个全局变量都是名字都是var,但是他们不在同一个namespace中所以没有冲突。

关键字using可以帮助从namespace中引入名字到当前的声明区域

#include <iostream>
using namespace std;

namespace first
{
  int x = 5;
  int y = 10;
}

namespace second
{
  double x = 3.1416;
  double y = 2.7183;
}

int main () {
  using first::x;
  using second::y;
  cout << x << endl;
  cout << y << endl;
  cout << first::y << endl;
  cout << second::x << endl;
  return 0;
}

输出是
5
2.7183
10
3.1416
就如我们所指定的第一个x是first::x,y是second.y

 

namespace也支持嵌套

需要注意的时,尽量不要在头文件中使用using namespace,因为头文件的引用具有不确定性,因此一旦在头文件中整体using了某个namespace,那么有可能会造成名称污染。

总而言之,using namespace 应尽可能的限制在小范围的作用域内。

 

2、头文件与源文件

头文件的后缀:.h,不需要编译,主要用于变量和函数的声明,而不必完成具体的实现,起到一个接口的作用。

源文件的后缀:.cpp,需要进行编译,主要存放函数的具体实现。

我的理解是:

在C++中,任何的符号(函数或者变量)都需要事先声明之后才可以调用。

假设有两个cpp源文件A和B,在A中定义了函数AFun,那如果B中需要调用这个AFun的话,也需要用同样的格式进行声明,然后才可以调用到AFun。

如果这个AFun是一个使用率很高的函数,或者A中还有很多类似的函数,那么所有需要这些函数的源文件都要被迫进行一系列的声明

头文件就是解决这个问题的,将A中所有使用率比较高的函数声明编写成一个独立的头文件,那其他源文件只需include这个头文件即可,无需将里面的函数再声明一遍。

值得注意的是,如果在头文件中声明变量,应该加上 extern 前缀,否则如果有两个以上的源文件引用这个头文件时,会提示编译错误。

有一篇文章说的非常好,链接在此:http://blog.csdn.net/chillon_liao/article/details/44261921

 

3、extern

extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 'extern' 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。
当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。
extern 修饰符通常用于当有两个或多个文件共享相同的全局变量或函数的时候

第一个文件:main.cpp

#include <iostream>
 
int count ;
extern void write_extern();
 
int main()
{
   count = 5;
   write_extern();
}

第二个文件:support.cpp

#include <iostream>
 
extern int count;
 
void write_extern(void)
{
   std::cout << "Count is " << count << std::endl;
}

最后输出:

Count is 5

 


宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒
目录
相关文章
|
3月前
|
C++
c++学习笔记07 结构体
C++结构体的详细学习笔记07,涵盖了结构体的定义、使用、数组、指针、嵌套、与函数的交互以及在结构体中使用const的示例和解释。
40 0
|
2月前
|
安全 C语言 C++
C++学习笔记
C++学习笔记
|
3月前
|
C++
c++学习笔记02 运算符
C++学习笔记,介绍了C++中的运算符,包括基本的加减乘除、求模、前后置递增递减、赋值运算符、比较运算符和逻辑运算符的使用及其注意事项。
41 6
|
3月前
|
C++
c++学习笔记01 基本知识与数据类型
C++学习笔记,涵盖了C++中的常量定义、数据类型、变量内存大小计算、基本数据类型(整型、实型、字符型、字符串型、布尔型)以及转义字符的使用。
47 4
|
3月前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
45 4
|
3月前
|
C++
【学习笔记】【C/C++】 c++字面值常量
【学习笔记】【C/C++】 c++字面值常量
42 1
|
3月前
|
存储 C++
c++学习笔记05 函数
C++函数使用的详细学习笔记05,包括函数的基本格式、值传递、函数声明、以及如何在不同文件中组织函数代码的示例和技巧。
35 0
c++学习笔记05 函数
|
3月前
|
编译器 C++
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
48 0
|
3月前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
43 0
|
3月前
|
C++
c++学习笔记09 引用
C++引用的详细学习笔记,解释了引用的概念、语法、使用注意事项以及引用与变量的关系。
44 0