C++和C的一些区别

C++:静态类型语言,包含整个C,C是建立C++的基础,而且C++是强类型语言,对类型检查严格。
C++比C更丰富:支持面向对象,支持泛型编程,支持异常,运算符重载等。

一些变化

  • 可以选用g++编译器(不是说只能用g++)。
  • 源程序扩展名可以是.cpp .cc .C .cXX 等。
  • C中的头文件变为:#inlcude <cstdio>
  • 不再使用scanf/printf而是cin/cout。
  • 标准的C++头文件不再以.h结尾。
  • 所有标准的类、函数、变量、对象都在std的命名空间中。

命名空间:

目的:对标识符的名称进行本地化,不然都在全局命名空间里,最大收益者是标准库。
定义:namespace name{//声明和定义}

using关键字:

using namspace 命名空间名称 //using namespace std;
using 命名空间名称::成员 //using std::in

C++新增的运算符:

::作用域运算符

::g=20;//表示访问的是来自全局作用域的变量g,通过作用域运算符访问被屏蔽的全局变量。
std::cout 作用域操作符,表示使用的是定义在命名空间std中的cout。
Using namespace std; //可以防止重名,公司不同产品

基本数据类型方面

c++增加了布尔数据类型和引用类型

  • Bool:布尔型,占1字节,两个bool类型常量:true 1和false 0
  • 引用类型:是一个特殊数据类型,在大多数场合可以取代指针,它是一个变量的别名。
int& j=i; //j是i的引用,不占存储空间,j只是i的别名。

在定义时必须初始化,指定是哪个变量的引用。
引用类型作为函数形参,传引用可以实现传回值(完全替换)
在c++中,函数的实参和形参之间不仅支持传值,还支持传引用。

数组的引用:

#include <iostream>  
using namespace std;  
void output(int (&a)[5])  
{  
    for(int i = 0; i < 5; i++)  
        cout<<a[i]<<endl;  
}  
int main()  
{  
    int a[5]={0};  
    output(a);  
    getchar();  
    return 0;  
} 

“引用”与指针的区别是什么?

  1. 引用必须被初始化,指针不必。
  2. 引用初始化以后不能被改变,指针可以改变所指的对象。
  3. 不存在指向空值的引用,但是存在指向空值的指针。

指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;

而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。

流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。

C++风格的强制类型转换运算符:

类型关键字(表达式) I=int§;

复杂数据类型方面:

C++中,使用结构体,共用体,枚举类型时,可以省略不写struct,union,enum关键字
C++中,结构体是当做类来使用的,可以定义成员函数。
C++中支持匿名联合,union{int x;char c[4];} x = 100;
在C++代码中,可以在任意位置定义变量

在调用函数时,会保存函数调用处的现场信息,调用函数返回后,恢复现场,接着之前的位置继续往下执行,所以调用函数会有一定的时间和空间开销,如果函数体中只有几行代码,调用函数的时间开销甚至比执行函数体中的语句更大

在调用函数时,操作系统会为这次函数调用创建一个独立的栈区,用于存放函数的形参和内部定义的局部变量,在函数执行结束返回后,操作系统会释放这个栈区,那么栈区中的这些变量也就跟着被释放了

在函数方面:

  • C++支持带默认参数的函数
  • C++支持函数重载(Function Overload) 函数重载
  • 参数默认值的指定顺序为从左到右依次指定。Void fun(int a ,int b=2,int c=3)
  • 函数的返回类型int不能省略。
  • C++中,使用结构体,共用体,枚举类型时,可以省略不写struct,union,enum关键字
  • C++中,结构体是当做类来使用的,可以定义成员函数。
  • C++中支持匿名联合,union{int x;char c[4];} x = 100;
  • 在C++代码中,可以在任意位置定义变量

函数重载:overload,函数名相同,但形参类型列表不同(相同:形参个数相同,并且对应位置的形参类型也相同)。

重写和覆盖:override,子类继承父类,重新实现父类方法。只有函数体不同(参数列表相同,返回值一致,抛出异常一致)。
被重写的方法不能是private。

隐藏:派生类的函数屏蔽了同名基类函数。

  • C++支持内联函数(In-Line Function),当然C99也支持,但C89不支持
    内联函数和带参数的宏差不多
    可避免时空开销,提升效率。但是代码别太多。
include <iostream>
using namespace std;
inline int sum(int a, int b);
int main()
{
     int s;    
     //编译器在遇到内联函数调用时,会将函数调用展开为内联函数体,避免函数调用的时空开销,提升程序运行效率

     //内联函数中的代码不要太多,太复杂
     s=sum(3,4); //编译器会把这行处理为:s=3+4;    
     cout<<s<<endl;
     return 0;
}
//定义内联函数,使用inline关键字
inline int sum(int a, int b)
{
     return a+b;
}

一些库函数:

  • 读入未知数目的string对象
Int main()
{
     String word;//string类的实例化,和int word一个原理
     While(cin >> word)
          Cout << word << endl;
     Return 0;
}
  • Getline 读取整行文本
Int main()
{
     String line;
     While(getline(cin,line))
          Cout << line << endl;
     Return 0;
}

String st(“”);
St.size()  //求长度
St.empty() //判断是否为空

C++风格的输入输出

Iostream库,istream ostream
流:试图说明字符是随着时间顺序生成或消耗的

  • Cin
  • Cout
  • Cerr(标准错误)
  • Clog(产生程序执行的一般信息)
  • Endl 操作符(manipulator),换行效果,并刷新与设备相关联的缓冲区(buffer).

忘记刷新输出流可能造成输出停留在缓冲区,如果程序崩溃,将会导致对程序崩溃位置的错误推断。

内存管理

New和delete:操作符,可重载。

  • new是先调用构造函数,再分配内存。
  • delete是先调用析构函数,再释放内存。
  • malloc和free是函数,可覆盖,单纯分配和释放内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐的提千万

江山父老能容我,不使人间造孽钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值