基础部分就快完了,高兴啊!
C和C++的最大区别当然是面向对象,不过不在这部分的考虑范围内。这里主要讨论static,结构体,malloc和new,引用和指针四部分。
第一题:static在C/C++中的区别
在C中,static主要有以下两种用途:
1、定义局部静态变量。局部静态变量具有局部变量的记忆性和生存周期的全局性特点。
2、限定访问区域。被static修饰的变量、函数只能被同一文件内的代码段访问。
而C++中,还有另一种使用方法,就是定义静态成员变量和静态成员函数,表示其不属于任何一个类实例,是类的所有实例所共有的。
第二题:结构体的区别
在C++中,结构体其实就相当于默认为public的类,所以,类该有的特性,貌似它都有,而C嘛,没有面向对象,所以……
(1)C语言的结构体不能有函数成员。
(2)C语言的结构体中数据成员没有private,public,protected等访问限定。
(3)C语言的结构没有继承关系。
差不多就是在比较C的结构和C++的类的区别了……
第三题:malloc 和 new (C++)的区别
貌似因为对C++不熟悉,我在C++里面也经常用malloc,来给指针开辟空间……
(1)new,delete是操作符,可以重载,只在C++中使用。malloc,free是函数,可以覆盖(),都可以使用。
(2)new调用对象的构造函数,malloc仅仅分配内存。
(3)new,delete返回的是某种数据类型的指针,malloc,free返回的是void指针。
第四题:引用(C++)和指针区别
引用是变量或对象的别名,只有声明没有定义,在C++(好像JAVA也有?)中,引用主要用于函数的形参和函数返回值。
(1)作为函数的参数时。
指针版swap:
void swap(int *a, int *b)
{
int temp; temp = *a; *a = *b; *b = temp;
}//出了名的绕死人、易出错函数,尤其是对C语言初学者来说
swap(&a, &b);//调用
引用版swap:
void swap(int &a, int &b)
{
int temp; temp = a; a = b; b = temp;
}
swap(a,b);
(2)作为函数的返回值,这个……C++用得少,指针函数什么的都还不敢用,更别提这些了……
大多数情况下可以被指针替代,但是遇到构造函数和操作符重载函数的问题时,不能替代。
(3)初始化不同,指针可不初始化,初始化时指向地址或为空,int * pi = &var;
引用必须初始化并:int &rval = var; 不存在指向空值的引用。
(4)引用初始化后不能改变。
(5)引用是别名,所以不用分配空间。
大概就这样……