中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
《c++面向对象高效编程》读书笔记-1
作者:未知 时间:2005-07-27 23:27 出处:CSDN 责编:chinaitpower
              摘要:《c++面向对象高效编程》读书笔记-1
         今日偶得一书,《c++面向对象高效编程》(人民邮电出版社出版发行,美Kayshav Dattatri著,潇湘工作室译)。虽然以前学过c++但是最近一直用delphi,因为一直觉得vc里面有太多的东西不懂就没了兴趣,直到看了这本才感觉c++(单纯的语言)原来是这么有趣,于是又兴起了学习c++的强烈欲望。首先说一点,我这人往往心里一热感觉就来了,可是什么时候感觉会消失连我自己却也不知道。也许明天,也许一个小时后,呵呵,谁知道呢?不管那么多了,还是先看吧,因为我觉得这本书的确不错哦!呵呵。
        为了改变以往的看书习惯,这次我决定做一下笔记,也许这能够让我坚持久一点点呢。如果你能看到,那就共同学习进步吧,我里面还有好多不明白的地方,也有好多可能理解错误的地方。盼遇高手指教,先行谢过了,嘿嘿!
---------------Rainspider(饶春阳)

《c++面向对象高效编程》读书笔记

2005.06.13
一、面向对象的oop与思想
1、对象是类的一个或多个实例
 程序运行中每个对象都保存有自己的数据副本,数据成员不共享(静态数据成员除外)。但是仅仅存在一份成员函数的实现代码的副本,各个对象(基于同一类)之间相互共享。
2、类的目的
 一个设计优秀的类必须易于理解和使用,而不仅仅是一些纯函数的集合或者数据结构的“类”封装。一个类的良好实现不应该允许客户直接访问或者修改对象的状态(数据成员),状态只能由成员函数来修改,而客户只能使用那些合法的可以被客户使用的成员函数来操作对象。
3、继承和聚合
 继承:从一般到特殊
 聚合:一般在设计密封和共享
4、面向对象语言的特性:
 支持数据抽象;封装;继承
 继承是区别基于对象的语言和面向对象的语言的关键功能。
5、构造函数和析构函数是特殊的成员函数,没有任何返回值。
6、类中的函数:
 1、构造函数;可以重载
 2、析构函数;唯一性
 3、复制构造函数;从现存对象中创建一个新的对象
 4、赋值运算符;将现存对象明确的赋给另外一个现存对象
(以上函数在没有明确定义的情况下编译器会自动产生,但是往往不符合正确的要求,所以要求类的创建者定义)
 5、运算符函数;运算符重载
 6、一般成员函数(动态或者静态的)

2005.06.14
一、复制构造函数
 1、在对象之间直接赋值的时候;clsssa a=b,定义a并且赋值,调用a的复制构造函数来实现。
 2、把对象作为参数按值传送时,fun(classa a);为了实现形式参数的拷贝要自动调用复制构造函数。
 *编译器自动调用复制构造函数。
二、在内存中创建一个新对象:
 1、编译器得到对象本身所需要的内存(或程序员使用new显式分配需要的内存);
  ?此时内存中的数据未知;
 2、将原始内存转换为对象,将数据成员或函数指针(有虚函数时)放置到位;
 3、对这个对象调用其构造函数。
三、对象的释放
 1、对于编译器自动创建的对象,在超出生命期后会自动释放:
  a、先调用析构函数释放该对象在生存期内所申请的任何资源;(这样的析构函数释由程序员负责)
  b、编译器释放对象本身所占内存,完成该对象的释放。
 2、对于使用new显式创建的对象,必须手动释放
  a、使用delete函数释放(相当于告诉编译器去执行1.a和1.b)。
四、赋值运算符“=”
 1、对于语言内建的简单变量,如int,char会自动调用右值去覆盖左值;
 2、对于对象,在没有定义的时候编译器会自动产生一个赋值运算符的实现函数,但是通常情况下需要自己来定义才符合要求;
  对于obja=objb,可能objb中不仅仅包含对象本身的成员数据,还可能有其所拥有的其他资源或者数据。 
 为保证完成操作后两者所含内容完全一样,需要人工指定赋值运算符的函数实现。
  对于右对象(源)中或者左对象中有其他除对象本身外的任何资源的情况,一般必须在实现函数中先释放左对象的资源再重新申请(和源大小相同)再进行复制。可以避免内存泄露或者出现无正常可用内存的情况发生。
六、一些需要注意的地方:
 1、重载函数防止出现二义性;
 2、析构函数只能有一个;
 3、在实现赋值运算符函数的时候必须防止有a=a的情况发生,可通过核对左右对象的地址来判断;
 4、赋值操作a=b后(赋值运算符函数)必须返回对对象a的引用。否则a=b=c将不能实现。

;-------------------------------------;
;以下笔记将按书上章节顺序编号;
;-------------------------------------;
3.5 this指针和名称修正
 类的成员函数由编译器象实现其他函数一样来对待,这就引出:
 1、为保证所实现的成员函数能够访问到调用它的对象,该对象的地址总是作为this指针传递到函数的第一个参数。不管你有没有在函数声名中指出这个参数,编译器总是把它放在所有参数的前面。
 2、为保证任意一函数都有自己特定的名称,编译器会进行名称修正。了解名称修正有助于查看连接器的输出信息。


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有