第一篇:读书笔记_C++
第三章:初步了解函数
1.一个简单的函数
函数又叫方法,是一个功能代码块,函数名前的类型表示该函数执行后的返回值类型。函数名后的括号内是表示调用者传入的参数,括号后面的大括号是函数体部份。函数名可以作为函数的指针传递。跟数组的数组名用法一样。
2.函数的传参
3.函数的返回值、参数与变量
4.函数的声明和定义
函数在被调用前必须申明,如果函数的定义在调用前,则可以不用申明。不过在大型程序中不确定其复杂的调用顺序,最好申明和调用分开。
5.局部变量
局部变量是指在函数中声明的变量,它的生命周期仅限于本函数大括号内。在内在中,局部变量存放于栈中。
6.全局变量
在任一函数的外部定义的变量叫作全局变量,它的生命周期是程序的生命周期。
第四章:C++的数据类型
1.变量的定义
变量相对于常量而言,就是可以改变值的量。它具有一个名字,一个值,值可以被改变。
2.将变量及数据存储在内在中
计算机的内存是一系列小格子型的存储空间,在我们定义变量时,计算机会根据变量的类型在内存中开僻相应的空间大小,如CHAR型占一个单元,INT型占4个单元。在未被变量赋值前,变量的值是随机的。
3.布尔型变量
布尔型变量只有两种值,1和0.通常非0的值,和1是等同的。0就是假,非0就是真。
4.字符型变量
字符型变量占一个字节,一个字节就是8位,2^8=256,一个字节可以表示256种字符。ASCII码。其中常用的a=97,A=65,1=48这三个是要记住的。字母的大小写相差32是判断第五位是1还是0.即2^5
5.wchar_t双字节型变量
双字节就是两个字节,两个字节就等于一个字。它所表示的种类达到2^16,即65535种,可以表示地球上任何语言的符号了。
第二篇:高质量编写c c++ 读书笔记
质量属性:正确性、健壮性、可靠性、效率、易用性、可读性(可理解性)、可扩展性、可复用性、兼容性、可移植
头文件:ifndef/define/endif
头文件的作用:
*通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。
*头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和 定义文件分别保存于不同的目录,以便于维护。
程序的板式:
程序的版式追求清晰、美观
在每个类声明之后、每个函数定义结束之后都要加空行。
一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。
长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
命名规则:
*标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。
*命名规则尽量与所采用的操作系统或开发工具的风格保持一致。
*程序中不要出现仅靠大小写区分的相似的标识符。
*变量的名字应当使用“名词”或者“形容词+名词”。
*全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身。
类名和函数名用大写字母开头的单词组合而成。
变量和参数用小写字母开头的单词组合而成。
常量全用大写的字母,用下划线分割单词。
静态变量加前缀 s_。
如果不得已需要全局变量,则使全局变量加前缀 g_(表示 global)。
类的数据成员加前缀 m_(表示 member),这样可以避免数据成员与成员函数的参数同名。
为了防止某一软件库中的一些标识符和其它软件库中的冲突,可以为各种标识符加上能反映软件性质的前缀。例如三维图形标准 OpenGL 的所有库函数 均以 gl 开头,所有常量(或宏定义)均以 GL 开头。
常量:
在 C++ 程序中只使用 const 常量而不使用宏常量,即 const 常量完全取代宏常量。
需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。
建立在整个类中都恒定的常量应该用类中的枚举常量来实现。(只能是整数)
函数设计:
值传递(pass by value)
指针传递(pass by pointer)
引用传递(pass by reference)
目的参数放在前面,源参数放在后面。
如: char *strcpy(char *strDestination, const char *strSource);
第三篇:Java从入门到精通读书笔记—c++程序员学java
Java从入门到精通读书笔记—c++程序员学java
第一章:
2分钟看完,老生常谈,即使没怎么用过java也知道这些。
第二章:
1.instanceof应该是c++中没有的,c++使用RTTI解决这个问题的,很难用。
2.super这种引用父类的方法也是比较简单的,C++中是用父类名::父类方法()解决的,有点难看。
3.自动类型转换和C++一样,精度变高的随便转,精度变低的会丢失。
4.强制类型转换只有(type)这一种,不像c++有static_cast、dynamic_cast、reinterpret_cast、和const_cast。
5.运算符什么的和c++几乎一模一样。
半小时看完。
第三章:
1.break可以跳出语句块,c++中没有语句块。语句块的定义就是在一段语句前加上花括号和冒号;
其他基本上和c++一样,5分钟看完。
第四章:
1.java数组越界会在运行时抛异常,c++不会,声明数组的方法也有些不一致。
java 声明数组的所有办法
int[] a = new int[4];
int a[] = new int[4];
int[] a = {1, 15, 26};
int a[] = {1, 15, 26};
2.java的数组是一个对象,自带length属性,使用简单。c++的数组不自带方法和属性,要知道数组长度只能sizeof(arrayObject)/sizeof(int)。当然如果使用STL中的vector之类的也和java一样简单。
3.java的所谓数组赋值(或者叫数组拷贝)其实就是c++中的两个数组指针的赋值,java没有指针,所以作者费了一大堆口水。好在java有垃圾回收,要不然一个指针的内存就算泄露了。至于真正的数组内容赋值,是使用System.arraycopy(ir, srcPos, ir, destPos, length);而C++一般使用memcpy等函数。若使用STL中的vector,那么就看vector的拷贝构造函数怎么写的,应该是vector的对象赋值过去而不是指针指过去。
4.重温了冒泡排序(时间复杂度O(n2)),和快速排序(最坏情况的时间复杂度为O(n2),最好情况时间复杂度为O(nlog2n))。
5.For-Each语法被引入java了,在很多地方用起来真是简单。Python和c#早就支持了,c++中虽然STL的algorithm包中引入了for_each,但是由于需要使用函数指针还是略显繁琐。
这章挺多,看了一个多小时啊!
第五章:类和对象
1.Java中方法的重载和c++的一样,都是通过参数的不同来区别。但是c++中可以设置默认参数,而java不可以。
2.java中的对象大部分只能new出来,或者clone出来,或者反射出来,而不能直接在栈上定义出来。而c++的对象在栈上和堆上创建的都很多。
3.基本类型的参数传递,java和c++都是传值。对象的参数传递,java是传引用,c++是拷贝,也就是传值。其实c++中大部分时候也是传引用或者传指针,但java没有指针,也没有选择耗时耗空间的拷贝,只能传引用了。
这章对于c++程序员来说太简单,几分钟过一遍就可以了。
第六章:继承
1.方法被覆写后,如果要调用父类的方法,c++必须用父类名::方法名,而java用super.方法名即可。
2.多态和动态绑定,java和c++几乎一样,都很简单。
3.final关键字:java中的final关键字可以将一个类限制为无法继承的,同样的还有C#中的sealed关键字。而c++是没有这个玩意的。
4.java的抽象类和c++几乎一样。
5.java是独根语言,引入了Object类,它的clone方法就好像c++中的拷贝构造函数,它的equals方法是用来比较内容的,而toString方法是将对象作为字符串输出的。
这章对于c++程序员来说同样简单,几分钟过一遍就可以了。
第七章:接口
1.java中有接口。C++没有,唯一类似的是含有纯虚函数的虚类(没有纯虚基类这个说法)。但是COM、CORBA等中间件中都有IDL语言(接口定义语言),使用这些中间件的c++程序员也没有少写接口。
2.接口实现的一些规定:
1)如果实现接口的不是抽象类,则必须实现其接口的所有方法才能被实例化;
2)接口中所有的方法默认为public;
3.接口可以用来实现多态;
4.java的内部类和c++差不多,都没人关心,最多懒得想名字的时候用用那个匿名内部类(例如什么UI的响应函数)。
5.java的对象克隆,吹了一堆就是个c++中的拷贝构造函数。所谓什么“浅克隆、深克隆”问题,就是c++中拷贝构造是遇上类中定义了指针的问题。C++程序员一望即知。
接口是为了维护单继承机制弄出来的,花半小时看看还是值得的。
第八章:面向对象编程
C++程序员不用看。
第九章:异常处理
1.java的异常处理中有finally语句块,而c++中没有,所以程序员要自己想办法来处理异常发生后诸如“资源释放”之类的问题;
第十章:线程
1.java语言自带线程机制,c++目前还是不带线程机制的。虽然boost::thread库也被众多c++程序员广泛使用。但是windows下用得最多的还是windows SDK自带的线程函数;而linux下用得最多的还是pthread。另外还有一些号称同时支持多个平台的多线程库。
2.java多线程有两种方法实现,第一是派生Thread类,第二种是实现Runnable接口。
3.java线程分为4种状态:new、runnable、non runnable和done,这和其他线程库大同小异;
4.run、start、stop、sleep、suspend、resume、yield、wait、notify和notifyall等方法的含义也和其他线程库一致。但suspend、resume和stop等方法是不建议使用的,因为可能会导致死锁。
5.java可使用join方法来等待线程结束,而在某些线程库中join方法经常是不可用的。
6.java的互斥使用synchonized关键字实现,它很类似于boost.thread中的lock(mutex),只不过它是对线程对象隐含的锁加锁。其实这很不利于新手理解。另外还介绍了synchonized的一些乱七八糟的用法,相信对于新手这只有反作用。
这一章对于线程,介绍得比较浅显,实现简单的多线程应该没问题,但是稍微复杂一点的也许就需要其他的开发包了。Java线程连个Mutex类都没有,这是最让我吃惊的,仅仅使用synchonized来实现同步、互斥、信号量该多麻烦啊,也许是我还没弄懂java多线程吧。
第十一章:图形编程
1.IDE的年代,GUI还是画出来吧。Java中也就Layout类需要看看,其他大部分Layout类也是凑数的,根本不会有人用。
第十二章:事件处理
随便看看了解即可,新手可以试着写写代码,老手直接IDE中添加事件即可。
第十三章:Swing用户界面设计
同第十一章,随便看看即可。界面一般有专人搞,普通程序员能看懂就行了。
总结:《java从入门到精通》这本书整体质量尚可,c++熟手大概一到两天可以看完,掌握程度在80%左右。看完后能够有一些基本概念,可以写一些基本程序。看完后离入门还早,更谈不上精通了。
说说我看完后的两个迷惑之处吧,第一是从来没有提到java中的对象、常量、代码所在的堆、栈等内存分布情况,对于c++程序员来说是很难适应的,可能是篇幅的原因吧;第二没有介绍垃圾回收机制,这可能是c++程序员更感兴趣的吧。
第四篇:C++常用填空题
一、单项选择题(共20题,每题1分,共20分)
6、对重载函数形参的描述中,错误的是 D
A.参数的个数可能不同
B.参数的类型可能不同
C.参数的顺序可能不同
D.参数的个数、类型、顺序都相同,只是函数的返回值类型不同
9、通常的拷贝构造函数的参数是
A. 某个对象名 B.某个对象成员名
C. 某个对象的引用 D.某个对象的指针名
10、关于构造函数特点的描述中,错误的是
A.定义构造函数必须指出类型
B.构造函数的名字与该类的类名相同
C.一个类中可定义0至多个构造函数
D.构造函数是一种成员函数
12、关于常成员的描述中,错误的是
A.常成员包含常数据成员和常成员函数两种
B.常数据成员必须是公有的C.常数据成员要使用构造函数成员初始化列表进行初始化
D.常对象只能调用它的常成员函数,不能调用其它的成员函数
13、关于友元函数的描述中,错误的是
A.友元函数不是成员函数
B.友元函数只能访问类中私有成员
C.友元函数破坏隐藏性,尽量少用
D.友元函数说明在类体内,使用关键字friend18、能够释放对象所占资源的是(析构函数)
二、填空题(共9题16空,每空1分,共16分)
1、函数重载时,编译系统会根据_形参的类型或形参的个数 来区分。
3、若希望用一个已有对象来构造另一个同类型的对象,可以使用拷贝构造函数来实现。
4、静态成员属于类,而不属于任何一个对象,它被同一个类的所有对象共享。
5、类的继承方式有私有 继承、公有 继承和保护继承。
6、重载运算符的含义必须清楚,不能有二义性。
7、按照联编进行阶段的不同,联编方法可分为两种: 动态联编 和静态联编。
8、当基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义,在派生类中重新定义时,其函数原型,包括返回类型、参数名、函数个数、参数类型以及参数的顺序都必须与基类中的原型完全相同。
1.在类中必须声明成员函数的原型,成员函数的实现部分可以写在类外。
2.如果需要在被调函数运行期间,改变主调函数中实参变量的值,则函数的形参应该是引用类型或指针类型。
3.抽象类只能作为基类使用,而不能声明它的对象。
4.进行函数重载时,被重载的同名函数如果都没有用const修饰,则它们的形参个数或类型必须不同。
5.通过一个常对象只能调用它的常成员函数,不能调用其他成员函数。
6.函数的递归调用是指函数直接或间接地调用自身。
7.拷贝构造函数的形参必须是本类对象的引用。
第五篇:C++ 心得
2010.10.13
今天在学习用windows自带的dos命令提示符窗口的命令:
列文件名dir,创建文件夹md(其他文件不能通过该命令创建,即使用了该类文件的后缀名,也只是将该名称和后缀名一块作为了一个新建文件夹的名字,例如md aa.txt的作用是建立一个名为aa.txt的文件夹),删除文件夹下的所有文件del(但是不包括该文件夹下的子文件夹。网上还有人说用deltree可以删除目录树,但是我试了不管用),删除文件夹rmdir或者rd(必须是空的,不能含文件或者文件夹),重命名文件或者文件夹ren x y(将x改名为y,如果是文件则应包括后缀名,如果是文件夹只是名字就可以),移动文件或者文件夹(没找到),复制文件copy a b(a和b可以是文件夹,这时候会复制a中的所有文件但不包括子文件夹到b中,遇到同名文件会询问是否覆盖;如果a和b是文件,则要包括后缀名,而且不只是相同后缀的可以复制,例如两个txt文件,而且非同后缀的文件也可以,例如txt复制到doc文件或者rar文件,这种复制后会连txt的属性一起复制给doc或rar,包括大小和占用空间这两个属性,doc的话还是可以打开,但是rar会损坏掉),创建文本文件copy con A.txt(或者用edit A.txt,区别是前一个会在输完命令后让你再输入文本内容,输完用ctrl+z结束,而后一个会跳出一个类似turbo-c的界面让你输入文字再保存),以树形结构显示出目录tree(用参数-f 将列出第个文件夹中文件名称)。
然后我想解压一个再f盘的压缩文件B,发现在ms-dos里进入B的目录后,直接输入
B.rar或者B.rar /x都会直接打开B,和双击B的效果相同(之前装.NET 3.5 Framework的时候用过这个命令dotnetfx35.exe /x来解压,我想用类似命令解压B的,结果证明不行,上面这个命令应该是只针对.EXE文件有效果,而且不是普通的EXE文件,应该是压缩类的exe文件)。但是我在实验exe文件的时候发现一个有用的办法。平时在有些文件夹里会有一些exe文件,双击之后有些可以运行,但是dos窗口一闪之后就没有了,看不到内容,但是先打开ms-dos,再进入该exe文件目录后输入名称回车则会看到运行内容,并且ms-dos窗口不会关闭。这可以用到C++编程之中。C++编程中,程序运行后有时候也会出现上面的情况,dos窗口一闪而过,看不到运行结果,以前都是直接在程序末尾加入system(”pause”)命令,现在也可以先将程序编译并生成exe文件,再打开MS-DOS,进入exe文件所在文件夹,输入该exe名称的方法来运行,这时候一定可以看到结果。