C&C++的起源历史
C语言是一种通用的程式语言,广泛用于系统软件与应用软件的开发。于1969年至1973年间,为了移植与开发UNIX作业系统,由丹尼斯·里奇与肯·汤普逊,以B语言为基础,在贝尔实验室设计、开发出来。
贝尔实验室的比雅尼·斯特劳斯特鲁普博士在20实际80年代发明并实现了C++。期初,这种语言被称作“C with Class”(包含类别的C语言),作为C语言的增强版出现。随后,C++不断增加新特性。虚函数(virtual function)、运算子多载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常处(exception)、RTTI(Runtime type information)、命名空间(namespace)逐渐纳入标准。1998年,国际标准组织(ISO)颁布了C++程式设计语言的第一个国际标准ISO/IEC 14882:1998,目前最新标准为ISO/IEC 14882:2014。根据《C++编程思想》一书所评述的,C++与C的效率往往相差在±5之间。
C++的发展历史
C++语言发展大概可以分为三个阶段:
- 第一阶段从80年代到1995年。这一阶段C++语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;
- 第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C++中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的冲击;
- 第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最复杂的一员。
C几乎是C++的一个子集,所以C语言支持的语法在C++基本都支持并需要使用。所以C plus plus(C++)在C的基础上又有了很多新的特性。
C++关键字
注:上表中为C++98/03中的63个关键字,其中深色标注为C语言中的32个关键字。C++11中有73个关键字,新增加的10个为:alignas/alignof、char16_t、char32_t、constexpr、decltype、noexpect、nullptr、static_assert、thread_local。
C++的数据类型
内置类型:C++中这些基本的数据类型也称为内置类型,也就是语言内部已定义的基本类型。
自定义类型:自己用struct/class/enum/union等定义的就是自定义类型。
名字空间
名字空间(namespace)是由标准C++引入的,是一种新的作用域级别。。它相当于一个更加灵活的文件域(全局 域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它 起一个名字:
namespace name1{
int a = 0;
}
namespace name2{
int a = 1;
}
name1:: = 3;
name2:: = 4;
名字空间域解决全局命名冲突的问题:
标准C++库中的所有组件都是在一个被称为std的名字空间中声明和定义的。在 采用标准C++的平台上使用标准C++库中的组件,只要写一个using指示符: using namespace std; 就可以直接使用标准C++库中的所有成员。 或者 std::成员 的方式也可以使用C++库里的成员。
namespace std //std是C++标准库的名字空间
{
//标准库成员
}
C&C++的输入输出
cout是标准输出流对象,<< 是输出操作符; cin是标准输入流对象,>>是输入操作符; endl是换行操作符; 他们都属于C++标准库,所以都在std的名字空间里面。
#include<stdio.h>
int main(){
int i2 = 1;
double d2 = 2.22;
printf("c type:int-> %d,double -> %f\n",i2,d2);
printf("please input int and double:");
scanf("%d,%f",&i2,&d2);
printf("c type : int -> %d,double -> %f\n",i2,d2);
}
#include<iostream>
using namespace std;
int main(){
int i1 = 1;
double d1 = 2.22;
cout<<"c++ type:"<<"int->"<<i1<<"double->"<<d1<<end1;
cout<<"please input int and double:"
cin>>i1>>d1;
cout<<"c++ type:"<<"int->"<<i1<<"double->"<<d1<<end1;
函数重载
在同一作用域类,一组函数的函数名相同,参数列表不同(个数不同/类型不 同),返回值可同可不同。
void func(int x,double d){
...
}
void func(double x,int d){
...
}
缺省参数
缺省参数,就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。缺省参数使用主要规则:调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数,即:带缺省值的参数必须放在参数表的最后面。 缺省值必须是常量。
//全缺省参数
int Add1(int a = 0,int b = 0){
return a+b;
}
//半缺省参数
int Add2(int a,int b = 0){
return a+b;
}
void Test(){
Add1();
Add2();
Add1(1,1);
Add2(2);
Add2(2,2);