C++语言与C语言的区别

C++语言与C语言的区别

1:流程化开发

C语言自顶向下,在加上选择循环的控制。方便程序员根据事情的流程来编写程序的逻辑。 从main函数开始程序的逻辑,加上一些函数调用,使程序逻辑清晰,清楚明了。 但是随着逻辑越来越复杂,在大项目中这种流程式的设计方法让程序员显得有些吃力,管理起来也有很大的挑战。 但是这种设计方法在编写一般的小项目时非常方便。 C++继承了C的这种特性,没有舍弃这种程序设计方法。只是在这种面向过程的设计方法上面增加了一些机制,即使在编写C++程序时不使用C++增加的机制,也可以完全用C的设计方法和C的语法来编写C++程序。这也是我们所说的C++向下兼容C。在编写小的项目时,用从C继承下来这种方法编写程序特别方便灵活,运行效率也仅仅次于汇编语言。

int main()
{
	int a, b, c;
	a = 987;
	b = 789;
	c = (a == 0 || b == 0) ? 0:(a+b);
	return 0;
}

2:模块化开发

C语言开发项目时,常常把程序功能模块化,既便于项目管理,又能为程序功能提供清晰的逻辑,还减少了大量重复代码。最常见的就是函数的定义和调用:把主函数里重复用到的功能和一些复杂的功能封装成一个个函数,再在主函数里调用。如果功能复杂,还能再把功能函数里的功能细分下去。如上述,C++继承于C,也支持这种设计模式。

int f(const int&, const int&);

int main()
{
	int a, b, c;
	a = 987;
	b = 789;
	c = f(a, b);
	return 0;
}

int f(const int& x, const int& y)
{
	return (x == 0 || y == 0) ? 0:(x+y);
}

3:基于对象开发之struct

C语言里提供了基础的常用类型,如char, int, double等,但这些数据类型满足不了开发需要,于是提供了struct, enum, union等关键词让我们定义方便自己使用的数据类型,最长用的就是struct,可以线性排列任意多个相同类型或不同类型的数据成员的结构体。于是C语言开发时,可以定义很多方便自己开发的结构体,再提供一些专门用于操作结构体的功能函数,用这种方法使编程更加丰富有趣。

#include <cmath>
struct Point{
	double x, y;
};

double distance(const Point&, const Point&);

int main()
{
	Point a, b;
	a.x = 1.1, a.y = 9.9;
	b.x = 9.9, b.y = 1.1;
	double c = distance(a, b);
	return 0;
}

double distance(const Point& n, const Point& m)
{
	return sqrt(pow( (n.x - m.x), 2) + pow( (n.y - m.y), 2));//勾股定理
}

4:基于对象开发之class

C++扩展了C语言的基于对象,具体形式是,扩充了用户自定义结构体的机制,从此用户自定义的类型可以做到和基础的原始类型使用起来几乎一模一样。在这里C++主要扩充了数据成员和成员函数机制,成员保护和类接口机制,操作符重载机制,友元机制,构造析构机制,静态成员机制等。有了这些机制,用户可以制作出表现行为和系统提供的基础类型一模一样的用户自定义类型和对象。这也是面向对象的基础。程序员原本注重流程,从这里开始,程序员就应该把注意力从流程上移开,来更加关注对象。标准库里的string就是一个很好的例子。

#include <string>
int main()
{
	std::string str1 = "my name is";
	std::string str2 = "Chj.";
	std::string str3 = str1 + ' ' + str2;
	std::cout << str3 << std::endl;
	return 0;
}

5:面向对象开发

有了class的概念,也就有了对象,而各个对象之间的联系,也需要描述。C++增加了继承类的机制,虚函数实现多态的机制,抽象类机制。让程序里涉及到的类和对象更好的联系到了一起,形成一个完整的类型体系,甚至能很好的抽象这个世界,具有很好的哲学性。有助于程序员把现实生活中的事物抽象化,信息化,这使得程序的规模可以增加到更大的一个级别。在大型的项目,例如一些大型游戏,工程等,都用到了面向对象的编程方式。标准库的IO流类型,就运用了这种思想。

6:template泛型编程

最后,C++还增加了泛型这个概念,让程序员能节省代码量,写出更加通用的代码。具体方法就是让程序员能把类型当成参数写出类模板和函数模板,在用到相应的类,对象和函数时,编译器根据程序员写好的模板,生成相对应的具体类型,函数等。泛型编程需要更加复杂的设计。标准库里的容器和算法,就使用了这种思想。

总结

可见,C++看上去并不仅仅是一门编程语言,作为C++程序员,更应该把C++看成很多语言的集合。 它包含了面向流程开发语言,基于对象开发语言,面向对象开发语言,泛型元编程语言。这四个重要的组成部分构成了C++语言。 为什么非要把C++分成这4种语言的集合呢?因为我是C++程序员啊。如果不是C++程序员,那这个问题就不用管。 但是如果是用C++语言做开发,那一定要把它分开。因为在一个项目中,不可能同时用到这4个部分。 注意,这一点一定要区分,如果不清楚这一点,那写代码时一会儿想面向流程,一会儿想基于对象,一会儿又想面向对象,最后写出来的代码肯定一团乱。 在项目开始之前,就应该想好这个项目更适合哪一种C++,并确定下来用哪一种。 一般的小程序用面向流程就能开发,方便实用。复杂一点的程序可以考虑用基于对象来开发,能更方便的把对象和流程剥离开。 如果是特别复杂的项目,里面包含大量的类型,那请务必使用面向对象的C++,来管理程序里那大量类型。 如果想让自己的代码更具有通用性,高可用性,可以使用泛型编程。 当然,C++方面还有很多的库。利用这些库,能加快程序员的开发效率。最实用的标准库STL,已经融入C++语言,成为C++的一部分了。

- CATALOG -