一、C++的介绍
Bjarne Stroustrup(本贾尼·斯特劳斯特卢普) 在 1982 年以 c 为背景创建一名(c with classes) 1983 年正式命名位 c++。1998年C++的ANSI/IS0标准被投入使用,通常这个版本的C++被认为是标准C++,所有的主流编译器都支持这个版本的C++。
二、C++的环境搭建以及工程创建与编译
Windows环境:vs2008、vs2010、vs2013、vs2015等
Linux环境:g++编译
三、预处理和头文件
在C++编译器中自动定义了一个预处理器的名字__cplusplus,c编译器自动定义了
_ STDC _
#ifdef __cplusplus
extern “C”
#endif
在标准的C++中,头文件是没有.h结尾的,只有文件名。比如#include < iostream >
源文件后缀:.cpp、.cxx、*.hpp
四、输入输出
头文件:#include < iostream >
标准输入:(standard input)与预定义的 istream 对象 cin 对应
标准输出(standard output) 与预定义的 ostream 对象 cout 对应
标准出错(standard error)与预定义的的 ostream 对象 cerr 对应
输入一个数据存储变量 a 中
int a;
std::cin >> a;这里 cin 可以自己检查数据类型
比如 double b;
std::cin >> b;
输入刚刚输入的数
std::cout << a;
std::cout<<b; 输入和输出多可以连续
比如:std::cout<<a<<b;
练习:写一个 c++程序,在程序中用变量的形式定义一个学生信息(学号,姓名,年龄)
从键盘输入信息,并且以[学号-姓名-年龄]的格式从终端输出
#include <iostream>
int main()
{
std :: cout << "请输入:学号、姓名、年龄" << std :: endl;//endl换行
char num[32] = {0}, name[32] = {0};
int age = 0;
std :: cin >> num >> name >> age;
std :: cout << "学号:" << num << "姓名:" << name << "年龄:" << age << std :: endl;
return 0;
}
五、命名空间
命名空间是为了确保程序中的全局变量不会与某些库中声明的全局实体名冲突而引入的。
1、命名空间的定义(namespace)
//定义
namespace 空间名
{
在该空间中的变量,函数,.........
};
所有可以出现在全局名字空间域的声明,都可以放在用户声明的命名空间中。(类、变量、初始化函数以及模板)把一个声明放在用户声明的空间中,并不会改变其意义,这样的声明所引入的名字要与空间名得名字一起复合使用
2、命名空间出现形式
1.在一个命名空间中可以嵌套其他命名空间
比如:
namespace hqdspace
{
int data;
int number;
namespace tiydy
{
char buffer[10];
}
}
2.同一个名字空间的定义可以跨越几个不同的程序文本文件 不同程序文本文件的名字
比如:
my.h 文件中有
namespace hqdspace
{
int data;
int number;
}
my.cpp 文件中有
namespace hqdspace
{
namespace tiydy
{
char buffer[10];
}
}
在 一起使用的时候是同一个命名空间
3、匿名命名空间(未命名的空间)
为了解决部分全局变量或者函数只能在本文中使用,不想在其他文件中使用,也不想与其他文件的函数名冲突
比如:
namespace {
void swap( double *d1, double *d2 ) { /* ... */ }
int data=10;
}
类似与 C 语言中的
static void swap( double *d1, double *d2 ) { /* ... */ }
static int data=10;
3、使用命名空间
①、通过域操作符 :: 引用空间中的内容
空间名::变量名
例子: XM::a
XM::b
XM::c
②、通过using 把整个空间暴露出来
using namespace 空间名
③、只暴露空间中的某一成员
using 空间名::成员名
例子: using XM::a; //在暴露XM 空间中的 a 成员
4、练习: 定义一个命名空间,在该空间中定义 int a,char,buf[100],void pf(){ 随便输出一些东西 }使用三种不同的方式,去调用空间中的成员。
#include <iostream>
//把STD暴露出来
using namespace std;
namespace Data
{
int a = 10086;
char buf[32] = "hell0";
void fd(void)
{
printf("hello world\n");
}
}
//2、把空间中的成员全部暴露出来
using namespace Data;
//3、暴露出空间中的某一个成员
using Data :: fd;
int main()
{
//1、使用域操作符引用空间中的成员
cout << Data :: a << endl;
cout << buf << endl;
fd();
}
六、命名空间的嵌套
语法:
namespace 空间名1
{
namespace 空间名2
{
//继续不断的定义
.....
}
}
例子:
namespace TX
{
namespace TX1
{
namespace TX2
{
int a=10086;
}
}
}
1、使用空间中的成员
①、利用域操作符号引用空间中的成员
TX::TX1::TX2::a
#include <iostream>
using namespace std;
namespace TX
{
namespace TX1
{
namespace TX2
{
int data = 10086;
}
}
}
int main()
{
//利用域操作符号引用空间中的成员
cout << TX :: TX1 :: TX2 :: data << endl;
return 0;
}
②、暴露
using namespace TX;
using namespace TX1;
using namespace TX2;
#include <iostream>
using namespace std;
namespace TX
{
namespace TX1
{
namespace TX2
{
int data = 10086;
}
}
}
//暴露所有成员
using namespace TX;
using namespace TX1;
using namespace TX2;
int main()
{
//直接使用该成员成员
cout << data << endl;
return 0;
}
③、暴露某一个成员
using TX::TX1::TX2::a;
#include <iostream>
using namespace std;
namespace TX
{
namespace TX1
{
namespace TX2
{
int data = 10086;
}
}
}
//暴露某一个成员
using TX :: TX1 :: TX2 :: data;
int main()
{
//直接使用该成员成员
cout << data << endl;
return 0;
}