C/C++的区别:面向对象的思想

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cyh183269855/article/details/53816688

    C/C++的区别是什么呢?

C中的结构体:

struct Point   //定义

{
 int x;    
 int y;
};

void main()
{
 Point pt; //声明
 pt.x=5;   //调用
 pt.y=5;
 cout<<pt.x<<endl<<pt.y<<endl;
}

C的结构体传递的是一种数据结构,我们只是在主函数里面对这种数据类型做某种调用。主函数的架构依然是基于函数,函数族的处理过程,即面向过程。

 

C++中的结构体

struct Point   //定义

{

struct Point   //定义

{
 int x;    
 int y;
};

void main()
{
 Point pt; //声明
 pt.x=5;   //调用
 pt.y=5;
 cout<<pt.x<<endl<<pt.y<<endl;
}



 int x;    
 int y;

void output()  //C++中的新东西,允许封装函数

  {

  cout<<x<<endl<<y<<endl;

  }

};

void main()
{
 Point pt; //声明
 pt.x=5;   //调用
 pt.y=5;
// cout<<pt.x<<endl<<pt.y<<endl;

pt.output();  //调用函数,API
}

可以看到C++中最大的区别就是允许在结构体中封装函数,而在其他的地方直接调用这个函数;联想到API模块化,API不就是一系列的封装好的函数集吗?因此C++只需调用类似模块的接口,这些个模块有个新名词,对象;并且也把结构体换一个名字,类。

这就是面向对象的思想。在构建对象的时候,把对象的一些操作全部定义好并且给出接口的方式;外部函数的调用只需要给出适合接口的指令就好了,从而可以实现完整的功能。对于外部使用者而言,可以不需要知道函数的处理过程,只需要知道调用方式、传递参数、返回值、处理结果就好了。


正是因为C++结构体中引入了函数函数封装,封装带来的一些问题不可避免提出了类的新技术,以便更好更方便的实现封装与调用。

 

配套的新概念

构造函数

  1、构造函数最重要的作用是创建对象本身 。

  2、C++规定,每个类必须有一个构造函数,没有构造函数,就不能创建任何对象

  注意:每个类构造时,如果不适用用户自己定义的构造函数,系统会分配一个默认的构造函数,该函数除  了创建对象,不做其他任何的处理,但是假如自己定义了构造函数,并且在子类中不给出相应的构造函数,那么因为默认的构造函数被刷新,子类继承不到默认的构造函数好,子对象将不能实例化。

 

析构函数

  1、当一个对象生命周期结束时,其所占有的内存空间就要被回收,这个工作就由析构函数来完成。

  2、析构函数是“反向”的构造函数,析构函数不允许有返回值,更重要的是析构函数不允许带参数,并且一个类中只能有一个析构函数。

 

函数重载

 重载构成的条件:函数的参数类型、参数个数不同,才能构成函数的重载。

 

函数覆盖

  函数的覆盖是发生在父类与子类之间的。


类的继承

   在C++中,给我们提供了一种重要的机制,就是继承。 理解继承是理解面向对象程序设计的关键。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。


多态性

   当C++编译器在编译的时候,发现Animal类的breathe()函数是虚函数,这个时候C++就会采用迟绑定(late binding)的技术,在运行时,依据对象的类型(在程序中,我们传递的Fish类对象的地址)来确认调用的哪一个函数,这种能力就做C++的多态性。


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页