c与c++的一些区别
参考
https://blog.csdn.net/cherrydreamsover/article/details/81835976
在这里自己再总结一下
面向过程和面向对象的区分:
面向过程(c语言)
从程序的开始一直到程序的结束,根据每个步骤需要做的内容进行实现,把问题的解决分给各个步骤,步骤与步骤之间具有高耦合性。
面向对象(c++)
在程序中,根据程序需要完成的功能来分别进行实现,把问题的解决分为各个对象,这些对象目的是完成需要他们完成的功能。
优缺点
引用链接中的例子
(1)用面向过程写出来的程序就像一份蛋炒饭,也就是米饭和炒的菜均匀的混合在了一起,因此蛋炒饭入味均匀,不会像盖浇饭那样,可能有时候吃的菜多饭少,还有时候菜少饭多。但是如果你不喜欢吃蛋炒饭,只想吃肉炒饭,那么原来做的这份蛋炒饭就得倒掉了,重新做一份肉炒饭,厨师就得辛苦了!
(2)用面向对象写出来的程序就像一份盖浇饭,也就是米饭和盖菜分别做好,将盖菜放在米饭上面,盖浇饭虽然没有蛋炒饭那样入味均匀,但是如果给了你一份土豆丝盖饭,你又不想吃了,换成牛肉盖饭,厨师只需要将米饭上面的土豆丝倒掉,重新做一份牛肉放在上面就好了。
一些具体语言方面的区别
关键字不同
- C99有32个关键字
- C++98有63个关键字
一些关键字的细微区别:
(1)struct:在C语言中struct定义的变量中不能有函数,而在C++中可以有函数。
(2)malloc :malloc函数的返回值为void*,在C语言中可以赋值给任意类型的指针,在C++中必须强制类型转换,否则报错。
(3)struct和class:class是对struct的扩展,struct默认的访问权限是public,而class默认的访问权限是private。
返回值
-
c语言将没有指定返回值类型的函数默认返回int型
-
c++中如果一个函数没有返回值则必须指定为void
缺省参数
- 缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时, 如果没有指定实参则采用该默认值,否则使用指定的参 。(C语言不支持缺省参数)
//半缺省参数
void FunTest(int _iParam1, int _iParam2 = 0 )
{}
void FunTest(int _iParam1, int _iParam2 = 0 , int _iParam3/* = 0*/)
{}
void FunTest(int _iParam1, int _iParam2 /* = 0*/,int _iParam3 = 0)
{}
//全缺省参数
void FunTest(int _iParam1 = 0, int _iParam = 1)
{ }
//注意:慎用缺省函数,否则会产生二义性
void FunTest ()
{}
void FunTest (int a = 10 )
{}
//假如使用不带实参方式调用FunTest()函数时,编译器将不知道调用哪一个,产生二义性
函数重载
- 函数重载:函数重载是函数的一种特殊情况,指在同一作用域中,声明几个功能类似的同名函数, 这些同名函数的形参列表(参数个数、类型、顺序)必须不同 ,返回值类型可以相同也可以不同,常用来处理实现功能类似数据类型不同的问题。(C语言没有函数重载,C++支持函数重载)。