从C语言到C++的进阶之C到C++的转变(篇一)

一、C语言到C++语言

1、C语言

C语言可以作为面向过程语言的一种代表,算是一种比较纯正的面向过程语言了。而面向过程的语言也称为结构化程序设计语言,是高级语言的一种。在面向过程程序设计中,问题被看作一系列需要完成的任务,函数则用于完成这些任务,解决问题的焦点集中于函数。所以说C语言的基本单位也是函数。

C语言这种结构化语言适合模块化设计。一个程序可以分解为多个函数,通过函数调用过程,使得可以用一条函数调用语句实现函数所完成的复杂运算过程。这种方法使得可以将一个复杂问题的解决过程分解为较为简单的几个子问题的解决过程。

2、C++语言

在早期时候,C++ 相对于C语言的基础上就添加了面向对象和模块的思想,这也可以理解为 C++ 中两个加号的来历了

不过,C++ 在面向对象上做的并不是太好,比如说 C++ 支持多继承,多继承会引发不确定性。C++ 同时支持指针,指针直接对内存底层操作,虽然效率高,危险系数却非常高,比如,一个简单的病毒程序就可以靠指针完成:你通过一个程序的中给指针随机赋值,能够获取到访问不属于本程序执行空间的其他空间的权限,那么这也就是一个计算机病毒。

3、C与C++的联系

C++语言是在C语言的基础上,添加了面向对象(类)、模板等现代程序设计语言的特性而发展起来的。两者无论是从语法规则上,还是从运算符的数量和使用上,都非常相似,所以我们常常将这两门语言统称为“C/C++”。

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。

其实,C语言与C++语言之间有很多的区别,有联系也有不同之处。具体的一些不同之处和转变将在下文介绍。

总之,c语言和C++并不是对立的竞争而是促进关系:
1.C++是C语言的加强,是一种更好的C语言。
2.C++是以C语言为基础的,并且完全兼容C语言的特性。

二、C到C++的明显转变

1、C++的关键字系列

01
这些关键字的具体用法可以参照文章:c++的关键字即保留字小结

2、函数必列参数

在C语言中,可以包含一个或多个参数的函数而不列出参数,而在C++中,这种声明只适用于无参函数的声明。不仅如此,函数的参数还必须规定好类型,不能省略。而且函数的类型也 不能是void,在定义时必须指定好类型。

3、指针类型相同才能赋值

在按照ANSI标准定义的C语言中,可以使用void指针指向任何指针类型:

int a;
int *p;
void *p1= &a;
p= p1;   //本句在C语言中是允许的,而C++不允许

最后一句赋值语言在C++中是错误的,因为C++编译器无法在赋值表达式中自动将void指针转化为其他类型的指针,因此类型不对应,无法完成赋值操作。若需要赋值,则必须使用强制类型转换:p=(int*)p1;
另外,不仅是指针的类型相同才能赋值,其他类型的变量相互赋值也必须是同一个类型,否则也会报错。

4、对struct等封装类型的增强

(1)在C语言中,enum,struct或者uinon等关键字均可以和同一作用域内的typedef同名,也就是在不同作用域内,同一个变量名代表的变量不是同一个,比如如下:

typedef int TA;  //int类型TA
union TA  //共用体类型TA
{
    
    
	int a;
	char b;
	float c;
}
struct TB  //结构体类型TA
{
    
    
	int a;
	char b;
	float c;
}
enum TC{
    
    success,fail};  //枚举类型TC

此处是两个TA分别表示的是不同的变量,因为C语言中的枚举、结构体、共用体总是分别用enum、strut、union前缀来表示的:

TA a;
union TA b;
struct TB c;
enum TC d;

以上分别表示的是int类型变量a,共用体变量b,结构体变量c,枚举变量d。

(2)可是在C++中,enum,struct,union或class必须与同一作用域内的typedef名称不同。原因在于该定义生成了可以只用名称引用的新类型,也就是可以不必加enum,struct,union或class前缀了。

struct TA
{
    
    
	int k;
	char m;
	double n;
}
struct TA a;
TA b;

以上,定义的变量a和b都是结构体TA类型的变量,如果此时再创建一个typedef某个类型为TA的话,那么C++编译器将无法区分定义时是该TA类型还是结构体TA类型。

5、typedef被屏蔽

在C++中,typedef是被屏蔽了的:

typedef int TA;
void main()
{
    
    
	struct TA
	{
    
    
		int a;
		char b;
		float c;
	}
	TA x;
	sizeof(x);
}

在C++中此处定义的x就是一个结构体变量,而sizeof返回的就是结构体变量的大小。
而在C语言中,x指int型变量。

6、sizeof操作符的差别

有两个差别,第一,在C语言中,sizeof('s')就等于sizeof(int),在C++中则等于sizeof(char)
第二,若定义了枚举类型enum E(x, y, z),在C语言中sizeof(x)等于sizeof(int),在C++中等于sizeof(E),也就是枚举类型变量的大小。

猜你喜欢

转载自blog.csdn.net/Viewinfinitely/article/details/111855589