面试指南 笔记(五) C和C++的区别
2012-07-19 09:10
295 查看
基础部分就快完了,高兴啊
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/tongue.gif)
!
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是函数,可以覆盖(
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/doubt.gif)
),都可以使用。
(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)引用是别名,所以不用分配空间。
大概就这样……
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/tongue.gif)
!
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是函数,可以覆盖(
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/doubt.gif)
),都可以使用。
(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)引用是别名,所以不用分配空间。
大概就这样……
相关文章推荐
- 面试指南 笔记(五) C和C++的区别
- 【程序员代码面试指南 编程笔记】猫狗队列(C++解法)
- 高质量C/C++编程指南 阅读笔记(二)内存管理
- 【转】C++工程师面试笔记
- C/C++21个重点笔记(常考笔试面试点)
- C++高质量编程指南笔记(七)
- 编程中国之高质量C++或C编程指南学习笔记
- Go语言学习笔记、Go和C++区别
- 【C++研发面试笔记】2. 多态性
- C++面试笔记一
- 【C++研发面试笔记】12. 基本数据结构-B树簇
- C++基础学习笔记----第十四课(new和malloc的区别、单例模式等深入)
- C/C++学习笔记1 - 深入了解scanf()/getchar(cin、cin.get()、cin.getline()、getline()、gets()、getchar()的区别 (OJ时候会用到)
- 【面试常见问题】【C++】指针和引用的区别,有哪些不同点,细细道2
- C++面试笔记(一)
- C++ 面试笔记2
- 【从C到C++学习笔记】内敛函数/内敛函数与带参数宏的区别/新的类型转换运算符
- 指针赋值 int a[5]={.... ...}, a 、&a[0]、 &a三者之间的区别 浅析 C/C++求职面试必备考点(五) .
- 面试指南 笔记(三) 数据类型
- 面试总结(二)转 C++的四种cast操作符的区别--类型转换