The differences between C++ and C are as follows:
1. Programming ideas
C++: 面向对象编程(类和对象、继承、多态等等)
C : 面向过程编程
2. Function parameter passing
C++:值传递、地址传递、引用传递
C :值传递、地址传递
例如:
int main()
{
int m = 10;
int n = 20;
func1(m , n);//值传递不改变m和n的值
func2(&m , &n);//地址传递改变m和n的值,因为是把m和n地址传递给指针变量a和b,所以对a和b的操作就是对a和b指向的地址进行操作,即会改变m和n的值
func3(m , n);//引用传递改变m和n的值,因为是直接引用m和n,这里不好理解的话,给大家举个例子:张三(小名叫小三),&小三 = 张三(&a = m) ,小三去干什么,是不是就相当于张三去干什么?是不是就改变了张三原来的状态?以后面向对象会经常遇到引用传参,例如运算符重载时会带有一个引用类型的对象,所以大家就按照刚刚这样去理解就可以,非常nice!
}
void func1(int a, int b)//值传递
{
//函数体里改变a和b的值,例如对a和b进行交换
int temp;
temp=a;
a=b;
b=temp;
}
void func2(int *a , int *b)//地址传递
{
//函数体里改变a和b的值,例如对a和b进行交换
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void func3(int &a , int &b)//引用传递,对于C来说,是C++独有的
{
int temp;
temp=a;
a=b;
b=temp;
}
3. Forced type conversion
C++: 类型(表达式)
C : (类型)表达式
4. Data type check
C++: 比C语言更为严格的数据类型检查
C : 相对来说数据类型检查不怎么严格
例如:
C语言:
const int a = 10;//a被定义成一个常量,之后不允许改变
//对于上面一行程序,如果经过以下变换大家来看看
int *p = &a;
*p = 20;
printf("a=%d",a);//这时候就能打印a=20,说明什么?说明C语言里对数据类型检查不怎么严格,本来a之前已经被定义成一个常量,之后不允许改变它的值,但是经过后面指针p就能改变a的值
C++:
const int a=10;//a被定义成一个常量,之后不允许改变
int *p=&a;//这时候编译不通过,会报错:invalid conversion from "const int" to "int"(即无效的转换)
*p = 20;
cout<<"a="<<a<<endl;//不能打印a的值,说明什么?说明C++里对数据类型检查非常严格,你既然定义a为常量,那么在它的声明周期内都是常量,任何方式都不能改变它的值
5. Namespace (namespace)
C++: 有命名空间
C : 无命名空间
//注:后面的章节本人会详细介绍命名空间的内容,这里只是介绍C++与C的区别
6. Dynamic memory allocation
C++: new/delete
C : malloc/free
//注:后面的章节本人也会详细介绍new/delete的内容,会与C里面的malloc/free对照着看
7. Function overloading
C++: 支持函数重载
C : 不支持函数重载
函数重载(概念):
(1)函数返回值不同,可以发生重载
(2)函数参数个数不同,可以发生重载
(3)函数参数个数相同,参数类型不同,可以发生重载
//注:重载不是重写
//后面运算符重载那一章节会介绍到函数重载
8. Variable permissions
C++: public/protected/private
C : 无变量权限
//后面章节也会详细介绍变量权限的内容
9. Exception handling
C++: 支持异常处理:throw/try/catch
C : 不支持异常处理
//先了解异常处理,后面会详细介绍
10. Template programming
C++: 支持模板编程template、标准模板STL
C : 不支持
//先了解,后面会详细介绍