C与C++的不同之处(只讲区别,C++有而C没有的,请听下回分解)
一.内存管理
1.C使用的时malloc/free,malloc再分配内存时是一页一页的分配的,当使用malloc时操作系统会直接批发32页内存,所以使用malloc时,如果没有后续在堆内存上的操作了,是可以越界的。
例如如:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int* p=malloc(4);
*p=4;
*(p+1)=5;
printf("%d\n%d",p,(p+1));
}
这样就是可以访问成功了。另外使用malloc会导致很多内存碎片,这是无法避免的
2.new会自动计算类型所需的字节数,并从堆中分配相应的内存,返回内存的首地址,而malloc不会。
3.new/delete会自动调用类的构造函数和析构函数
4.new申请的内存会在内存前一个字节记录这块内存所存放数据的数量
二.static
c++完美的继承了c在static上的所有用法。并对其做出了扩展,
C++中的static可以运用到成员变量和成员函数上面,将其编程静态成员变量和静态成员函数
静态成员需要在类内申明,但必须在类外定义和初始化,和成员函数一样需要加 "类名::"限定符表示它属于那个类,但不需要加static
#include
#include
using namespace std;
class User
{
static char name[20];//类中的申明
char pass[20];
public:
User(const char* name,const char* pass)
{
strcpy(this->name,name);
strcpy(this->pass,pass);
}
void show()
{
cout<<name<<" "<<pass<<endl;
}
};
char User::name;//类外定义
int main()
{
User user(“hehe”,“z234”);
}
三.const
C++对const的检查更加严格,而且被const修饰过的变量,编译器只会对其取一次的值,而C不会。所以const在c++中更加安全
四.void*
void*在C中是一个万能指针,可以对任意变量赋值,而在C++中不行,需要强制转换,因为C++对类型的检查更加严格