面向对象的程序设计一——认识C++,从C语言到C++(1)

      本系列文章为c++面向对象的程序设计,首先说一下我对这门课的经历

     这门课是小奂在大三期间学习的一门课,记得当时课程上的大作业是利用c++完成稀疏点云高程排序,基于高程赋予加彩色以及对点云进行滤波,最后内插加密生成DEM(这个作业的内容中可能包含了一些专业相关的东西),但底层的语言以及框架就是c++,类与对象;

      当时因为这个大作业也挣扎了很久吧,好在最后能够及时完成,也很有成就感吧。同时也对面向对象的很多知识有了理解,毕竟代码这种东西自己写一遍总比书本上的文字强得多。在那之后,这种技能又丢到一边了。现在大四,拿到保研资格有了空闲的时间,同时也有导师的原因,为之后的研究生打个基础,又把这个重新拾起来,把一些基本的东西记录下来同时分享我对这些基本内容的理解,很多东西可能理解的也不是那么深刻(小奂也不是计算机专业)。

首先,在第一篇文章中介绍一些c++与C语言的区别(也就是面向对象的程序设计与面向过程的程序设计到底有哪些不同)

由C语言到C++,众所周知,c++语言是在C语言的基础上发展来的,C语言是一种典型的面向过程的编程语言。C++不仅支持面向过程的编程,同时在此基础上增加了类与对象,类和对象则是所有面向对象编程语言所必备的东西。面向对象的编程语言就是利用类和对象完成所需要的数据操作。

那么什么是对象,什么又是类呢?

简单的来说,客观世界中的任何一个事物都可以看作一个对象。对象包括它的属性和行为两个方面,对于C++语言来说,对象就是数据和函数。

类:是一种抽象的事物,是一系列具有共性事物的本质。

类是对象的抽象,对象则是类的一种特例。

面向对象的程序设计对比面向过程的来说,具有封装、继承与重用、多态性等一系列特性,这些在以后的学习中将会深入的探讨。

对于面向对象有了一个初步的了解后,下面说明一下C++相较于C++做了哪些扩充与删改。由于内容还比较多,大概有十个比较重要,需要大家理解的知识。本篇文章先介绍一下前五个

1、标准输入输出流(头文件  #include<iostream>)

     熟悉C语言的小伙伴都知道C语言中使用printf()和scanf()进行数据的输入与输出进行人与计算机之间的交互。而C++中则采用cout和cin作为标准的输入和输出,标准输入输出流与printf()和scanf()比较,省去了繁琐的利用格式字符串指定输出的类型(%d,%f,%c等),C++系统则会自动按数据的类型进行输出,更为方便简洁。

   若需要指定输出所占的列数,可以使用控制符setw进行设置(需要使用头文件iomanip.h)。例如:setw(5)表示为输出数据预留五列的空间。

 

对应的输出结果:

 可以看出,cout和cin的输入更加简单灵活;

对于setw控制符,由输出结果可知,若所预留的列数大于数据的位数,则会在数据前利用空格进行占位,若所预留的列数小于数据的位数,则会把数据完整的输出。

2、const定义常变量

在C语言中,相信大家都见过#define,用来定义符号的常量。define的本质是在预编译时对字符进行置换。

例如  #define pi = 3.14159 就是把程序中的pi全部置换为3.14159.在编译之后,程序中就不存在pi这个变量,没有类型,也不占用存储空间,这在编写程序程序就很容易出错和造成混乱。C++语言针对这个问题也做出了相应的调整,那就是const 定义常变量。

const float pi=3.14159

此时定义的常变量pi具有变量的属性,有自己的数据类型,占用存储空间,有地址,可以用指针指向它。用const定义的变量在运行期间的值是固定的,不能改变的。

   因此,一般把程序中不允许改变值的变量定义为常变量。

3、函数原型的声明

在C语言中,如果函数的调用的位置在函数定义之前,则应在调用函数之前对所调用的函数进行声明。但如果所调用的函数是整型的,也可以不进行函数的声明。

int max(int x,int y);                                           //max函数原型的声明

int max();                                                            //不列出max函数的参数表

max();                                                                 //若max是整型函数,可以省略函数类型

以上几种声明的形式在C语言中都是合法的,但在C++程序中,函数调用之前必须对所调用的函数作函数原型声明,这不是建议性的而是强制的。

函数类型  函数名(参数表);

4、函数的重载

    重载是C++语言一个重要且基本的特性,即对同一事物在不同条件下赋予不同的涵义,实现“一物多用”。

函数重载:C++允许在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和参数类型不相同,这些同名函数用来实现不同 功能。

       函数p1为被重载的函数,分别对于整型,单精度,双精度三种不同数据类型进行一组数从大到小的排列。具体的函数定义如下:

4.1整型:

 4.2单精度

4.3 双精度

 

 此程序,当输入的数据为整形时,调用p1(),系统则会自动进行判断选择调用整型函数p1;

 当输入的数据为单精度形时,调用p1(),系统则会自动进行判断选择调用单精度函数p1。

5、函数模板

       学习完函数重载可以实现一个函数名多用,将实现相同或类似功能的函数用同一个函数名来定义。这样可以在调用同类函数时含义清楚,方法简单。但仍需要在程序中对每一个函数都进行相应的定义,即使只是形参的类型不同,也需要分别定义,在有些时候还是比较繁琐麻烦的。

      为了对这个问题进行改进,C++提供了函数模板。

       函数模板:实际就是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个通用模板就成为函数模板。

      凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用该函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同的功能。

通用函数定义:  template <typeneame T>

template的含义就是模板,尖括号中先写关键字typename,后面跟一个类型参数T,T就是一个虚拟的类型名,并未指定它是哪一种确定的类型。

 定义函数模板max

 主函数对模板函数进行调用,模板函数max会根据传入实参的数据类型确定T的类型。

输出的结果,符合预期的结果,但使用函数模板很容易发现,代码量远远小于使用函数重载,因此在一些场合灵活使用函数模板可以大大减少工作量,提高代码的效率。 

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值