essential C++第二章学习心得

原创 2015年04月26日 19:59:16

今天开始正式记录一点学习c++的心得,笔者用的参考书籍是电子工业出版社2012年发行的EssentialC++中文版,由侯捷先生翻译,原版作者也是另外一本c++编程圣经《c++ prime》的作者——Stanley B.Lippman。此书可视为c++prime的简化版,与一般的编程语言参考书籍不同,书中并不是采用以基础知识为框架的层层深入的结构,而是根据不同的编程风格分别介绍c++中包含但是有别于面向过程编程语言的一些特性,故而本书的潜在读者实际上需要一点c语言的基础。笔者对于c语言只是略懂皮毛,所幸的是对于本书中提及的程序设计的概念尚能理解。下面正式分享前几天的学习心得:

 

1.动态内存管理

 

new Typeinitial value

 

以此方法申请的变量空间位于内存中的堆上面,系统并不会自动管理堆上的空间,所以堆中的空间使用完毕以后需要程序员手动回收:

 

delete pointer//回收pointer所指向的空间

 

如果回收数组,则采用:

 

delete [] arrayname;//回收数组arrayname

 

C语言中的内存管理需要程序员手动进行,所以十分容易出现动态申请的空间没有及时回收,从而造成内存泄漏。

 

2.为函数提供默认参数值

 

returntype  functionsnameparamenterlist);//函数申明

Returntype  functionnameparamenterlist){//函数定义

为了更高的可见性,提供的默认参数一般在申明处给出:

returntype  functionsnametype  p1, type  p2, type  p3=initialvalue);

默认值的解析从最右边开始进行,即具有默认值的参数的右侧所有参数都要提供默认值。调用函数时,可以省略指定默认值的参数,此时参数会使用默认值;也可以提供具有默认值的参数,此时参数由原来的默认值改变为函数调用者赋予的参数值。

 

3.局部静态对象

 

Const type name

声明name为静态对象,在程序运行过程中始终存在,可供其他函数调用,直到程序运行完毕销毁。静态对象常用来存储函数调用结束后需要保存的结果。

 

4.inline函数

 

Inline type function paramenterlist){}

Inline函数要求编译器在遇到这样的函数调用时将函数展开,这样可以提高效率。

 

5.函数重载

 

Type functionparamenterlist1);

Type functionparamenterlist2);

定义名字相同,但是参数列表不同的函数称为函数重载。编译器会根据函数调用者传入的参数确定具体调用哪一个函数。

 

6.模板函数

 

对于操作相同、参数类型不同的函数可以采用定义模板函数的方法减少代码的重复量

Template <typename elemtype>

Type function(type  para1, elemtype para2);

上述函数声明表明elemtype只是一个占位符,是不确定的数据类型,具体是什么样的数据类型需要等到函数被调用的时候检查函数的第二个参数才能确定,但是在函数内部,elemtype具有标准函数类型关键字的一切功能。

 

7.函数指针

 

指向函数的指针定义:

type *pointer)(int);

Pointer被定义为一个指向函数的指针,函数的参数类型为int,返回值类型为type。只要符合这个要求的函数都可以通过pointer间接引用。

 

8.枚举类型

 

enum namevalue1value2,……,valuen

定义name为枚举类型,value1valuen的值可以当作整数直接使用,他们分别代表0~n-1

 

9.设定头文件

 

函数定义只能有一份,函数声明可以有多份,声明和定义一般分开放在不同的文件(inline函数除外,因为编译器需要在函数调用处展开这样的函数)。

extern type name

变量name的声明。若不加extern,则视为变量name的定义,那么其他文件中不能再次提供对变量name的定义。

const type name

Const object name的定义,被定义为const object变量只在文件内部有效,故而可以在文件外进行多次定义。

 

 

小结:c++的动态内存管理:newdelete。 函数申明处可以为函数参数提供默认值。局部静态对象可保持至程序结束。Inline函数实际上是对于函数的宏定义。函数重载和函数模板可以结合使用,操作不同使用函数重载;操作相同、函数参数个数不同亦使用函数重载;操作相同、函数参数个数相同类型不同时采用模板函数。函数指针提供了一种一对多的引用模式,可减少代码的重复量,增加代码的灵活性。

 

(注:头文件的设定还有一些不清楚的地方,有记叙不妥之处,还请广大网友指正)

读《科学哲学 Philosophy of Science》的感想与总结

对《科学哲学》每章进行了粗浅的总结,并谈了谈自己的看法。
  • cjbct
  • cjbct
  • 2016年11月30日 23:37
  • 1113

C++ Primer学习总结 第7章 类

第7章 类 1.    引入const成员函数(C++ Primer P231-232) C++类的常量对象是无法调用非const成员函数的,如果想让常量对象调用某个成员函数,必须声明...
  • u013480600
  • u013480600
  • 2015年03月07日 01:02
  • 1571

《python核心编程第二版》第六章练习解析

1.字符串 .string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分?      答案是可以!    string模块中find内建函数,strin...
  • u013938528
  • u013938528
  • 2015年04月26日 10:57
  • 1990

c++primer学习心得

  • 2008年08月28日 13:55
  • 25KB
  • 下载

c++prime学习心得

  • 2017年08月20日 18:30
  • 51KB
  • 下载

《windows程序设计》第二章学习心得

Unicode简介 Unicode是ASCII字符编码的一个扩展。Unicode用的是16位字符编码,而不是像ASCII那样的7位编码。 ------------------------------...
  • lgh1992314
  • lgh1992314
  • 2013年03月20日 19:29
  • 1129

<Python基础教程>学习心得_第二章

数据结构---序列 Python中序列划分 1.列表 特点 可以被修改类似于C语言中数组 2.元组 特点 不可以被修改 3.字符串 特点 不可以被修改 4、Unicode字符串,buffer对象,x...
  • u010003835
  • u010003835
  • 2015年05月27日 11:15
  • 406

Essential C++ 第二章代码

把第二章几乎所有内容都揉在了这个程序里.......... #fibon.h #ifndef FIBON_H_INCLUDED #define FIBON_H_INCLUDED #include...
  • u012453913
  • u012453913
  • 2013年10月16日 09:53
  • 481

Essential c++第二章练习题2.2

2.2:P数列的求值公式是P(n)=n(3n-1)/2,借此产生1,5,12,22,35,等数值。试着定义一个函数,利用上述公式,将产生的元素放入用户传入的vector之中,元素个数由用户指定。,请检...
  • u013496193
  • u013496193
  • 2016年10月12日 21:04
  • 104

C/C++ 多线程学习心得

这是我第一次写技术博客, 有点紧张(呵呵...~), 我就从写学习多线程编程的心得开始吧.   个人觉得在学习多线程编程之前最好先了解进程和线程的关系, 然后在学习线程工作方式的过程中动手写个(我是...
  • chen825919148
  • chen825919148
  • 2012年08月20日 14:34
  • 922
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:essential C++第二章学习心得
举报原因:
原因补充:

(最多只允许输入30个字)