C++ basic learning: the difference between C++ and C

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  : 不支持
//先了解,后面会详细介绍

Guess you like

Origin blog.csdn.net/Mr_zhang1911116/article/details/125077465