C++概述
前言
我们学习了一个学期的C语言,相信大家都对编程有了一个相对全面的认识
现在我们要进入C++了,那么,到底C++和C有什么区别呢?
我们先来看一个输出hello,world 的小程序
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, world." << endl;
return 0;
}
下面将会一点一点的解释上面程序和C的不同
输入输出
cout :一个智能对象
cout << "Hello, world." << endl;
以前无论要输出什么类型的数据,都要告诉编译器这是什么东东
用各种%d %s %f %l ……
现在不用了,我们使用cout的时候,直接输出就好了,
智能对象cin会知道你想要输出什么东西,然后就输出
(毕竟是智能的嘛)
后面的endl 则是我们的换行符(相当于”\n”)
所以我们可以这样子
int a = 1;
double f = 2.3;
cout << a << " " << b << endl;
cout << b << " 233333\n";//"\n"一样可以使用
上面的输出是这样子的
a 2.3
2.3 233333
cin: 也是一个智能对象
与cout类似
我们可以使用cin读取数据
int a;
double b;
double d;
char c
cin >> b;
cin >> a >> d;
cin >> c;//!!
cin读取字符的时候,能读空格,能读回车,只有遇见EOF才会不读
(如上面读取C时)
cin读取其余类型的时候,会自动跳过空白字符(空格回车等)
预处理,包含的文件及库
我们的stdio.h呢?
#inlcude<stdio.h>
相信大家都已经打过无数遍这条语句
在C++中,这个语句同样也可以使用,因此我们同样可以用pringf和scanf
不过,C++中,我们有更好的工具,这些工具,都放在了另外一个头文件里
因此我们有了
#include <iostream>
与C类似,内置的库文件我们用<>括起
而自定义的头文件则用双引号”“括住
其他库文件的区别
C中的stdlib.h string.h ctype.h math.h库文件会有变动呢?
在C++中,上面的库文件都是能用的
不过在C++中有个更好的写法
#include <cstring>
#include <cstdlib>
#include <ctype>
#include <cmath>
总结而言,就是少了.h的后缀名,并在前面加C
原因嘛,据说是原本想用.hpp .hxx等做C++头文件的后缀名的
纠结来纠结去,统一不了
然后干脆就都不用后缀名了(简单粗暴的解决方法)
PS:
自定义的头文件还是要用.h的扩展名的,只不过是内置的库文件有改动
再PS:
c++里面有好多好多超好用的库,比C好用多了
名称空间简介
看到了我们的第二条语句:
using namespace std
翻译过来便是
使用 名称空间 std
什么是名称空间
简单来讲就是,
你的名字所在的一个集体
如果说你在七班里面,叫同学的名字:谢江钊,嗯,马上就能够找到
因为全班就一个叫谢江钊的
假设如果其他班也有有个叫谢江钊的,然后你在学校里找(不在七班里找)
惨了,两个同名的,谁是谁
这个时候,你就会加上一个限定范围的名字:计科7班
所以说,如果不在7班这一个名称空间里找这一个名字,你就必须加上限定范围的词汇
偏题了
之前我们所说到的,cin, cout ,都在std这一个名称空间里面
我们用
using namespace std
告诉编译器,我们使用了std名称空间里面的所有名字
之后我们便可以直接调用
如果没有那条语句把所有std名称空间里的名字导入怎么办
在大山中学里找谢江钊,同名的怎么区分?
我们给我们寻找的对象加上一个限定名:
计科7班::谢江钊
这下能够找到吧
同样,如果我们没有使用std名称空间
也可以使用
std::cin
这里的 : : 名字叫做作用域解析运算符
然后我们的程序就变成了这样子
#include <iostream>//少了一条使用名称空间的语句
int main()
{
std::cout << "Hello, world." << std::endl;
return 0;
}
那如果我只想要std名称空间里面的一个名字呢?
用using std::cout;
PS
1. 文件iostream里包含了std名称空间,所以我们可以使用std
2. endl也是在std名称空间里的
3. cstdlib,cstring, cmath 里面的函数名字也是在std名称空间里面
引用
一个几乎能够替代指针的东东
长话短说,直接上swap函数对比(作用,交换两个数的数值)
void swap(int *a, int *b)//使用指针
{
int temp = *a;
*a = *b;
*b = temp;
return ;
}
void swap(int &a, int &b)//使用引用
{
int temp = a;
a = b;
b = temp;
return ;
}
上面两个函数都能够达到相同的目的:交换两个数的数值。
至于为什么这样子呢?自己看看书吧,以后再详细写。