C++&C学习笔记

上传人:jiups****uk12 文档编号:57663314 上传时间:2018-10-23 格式:DOC 页数:143 大小:862KB
返回 下载 相关 举报
C++&C学习笔记_第1页
第1页 / 共143页
C++&C学习笔记_第2页
第2页 / 共143页
C++&C学习笔记_第3页
第3页 / 共143页
C++&C学习笔记_第4页
第4页 / 共143页
C++&C学习笔记_第5页
第5页 / 共143页
点击查看更多>>
资源描述

《C++&C学习笔记》由会员分享,可在线阅读,更多相关《C++&C学习笔记(143页珍藏版)》请在金锄头文库上搜索。

1、1 梦想是成长的潜力。 C+学习笔记.2 类与数据抽象2 运算符重载9 继承16 文件处理22 异常处理24 数据结构26 链表26 堆栈31 队列32 二叉树32 模板100 虚函数和多态性259 string 类与字符串处理393 STL.649 I/O 流1035 C+杂记.1136 C+中 const 总结 1240 C+中的 static 成员 1325 构造函数与析构函数1367 名字空间1452 常用 C+标准库头文件1539 面向对象编程工程的一般结构1678 出错提示1692 this 指针.1703 动态内存分配与 new 和 delete 运算符1754 对象与成员关系的

2、深入思考1775 类、类成员、对象可借用二维表来描述:我的黄金思想1788 类型转换1802 函数指针1813 关于友元1837 C 语言学习笔记 1908 C 语言概述 1909 基本数据类型1970 算术运算符2120 程序结构2271 C/C+数组.2381 C/C+指针.2518 C/C+函数.2747 结构型2924 编译预处理3098 条件编译3155 2 C 杂记 3205 运算符的优先级和结合律3224 本文档结构: 标题 1 标题 3 标题 4 本文档大部分内容取自C+大学教程 (第二版) ,美Harvey M.Deitel 和 Paul James Deitel 著,电子工

3、业出版社。 C+学习笔记学习笔记 类与数据抽象类与数据抽象 在 C 语言和其他过程化编程语言中,编程是面向操作的。而在 C+中,编程是面向对象的。在 C 语 言中,编程单位是函数,C 语言程序员的主要工作是编写函数,完成某个任务的一组操作构成函数, 函数的组合则构成程序。数据在 C 语言中当然很重要,但这些数据只用于支持函数所要进行的操作。 系统指定中的动词帮助 C 语言程序员确定一组用于实现系统的函数。 而在 C+中,编程的单位是类,对象最终要通过类实例化。C+程序员把重点放在生成称为类的用 户自定义类型。每个类包含数据和操作数据的一组函数。类的数据部分称为数据成员数据成员,类的函数部 分称

4、为成员函数成员函数,有些面向对象语言也称方法。int 等内部类型的实例称为变量(variable) ,而 用户自定义类型(即类)的实例则称为对象(object) 。在 C+中,变量与对象常常互换使用,C+ 的重点是类而不是函数。系统指定中的名词帮助 C+程序员确定实现系统所需的用来生成对象的一 组类。 类与结构型: C+中的类是由 C 语言中的 struct 演变而来的,C+中的结构和类是非常相似的。结构成员可以是 任何类型,但不能是结构本身的类型。例如,Time 类型的成员不能在 Time 的结构定义中声明,但 可以在该结构定义中声明 Time 结构的指针。当结构包含同一类型结构的指针时,称

5、为自引用结构。 自引用结构用于形成链接数据结构,如链表、队列、堆栈和树等。结构的定义并不在内存中保留任 何空间,而是生成新的数据类型,用于声明变量。 访问结构成员或类成员时,使用成员访问运算符,包括圆点(.)和箭头运算符(-) 。圆点运算符 通过对象的变量名或对象的引用(引用对象)访问结构和类成员。箭头运算符通过对象指针(指针 对象)访问结构和类成员。 3 结构与类相比生成的数据类型有一定的缺点。程序能够直接访问数据成员,所以无效的数据可能赋 给结构成员。如果 struct 的实现方法改变,则所有使用这个 struct 的程序都要改变,这是因为程 序员直接操作数据类型,没有一个“接口”保证程序

6、员正确使用数据类型并保持数据的一致状态。 有关结构型的更多信息参见“结构型” 。 结构与类是很相似的 以下引用摘自网络: “结构和类在 C+中有好多相似之处,同样可以有方法(在 C 中的结构就不行) ,同样都是数据类型,所说的不同 也许是指 C 中的结构与 C+中的类相比吧。 ” “其实在 C+中,类和结构没有什么大的区别,也可以定义方法,只是在类中,默认的是 private,而在结构中默认的是 public。” 结构也可以定义方法: class myc int in; float fl; ; struct mys int in; float fl; ; MyClass mc; MyStruc

7、t ms; int c=sizeof(mc); int s=sizeof(ms); 运行后 c=s+4 个字节,你用 VC 试试就知道了 原因:对于类(其实是浪废)多了一个虚函数指针,当上级类中有虚函数定义时,如果本类定义了这个虚函数, 则执行 Up* u;Child* c=new Child(); u=c; /基类指针指向派生类对象 u.fun();/fun 为 u 中定义的虚函数 第三行执行的是 c 定义的虚函数,运行时如何知道这一点呢,就是通过上面的指针现查到的 (即 C+的多态性) 。 总之:struct 更节约内存,但不能定义虚函数了。 总结:C+中的结构(struct)与类大致上相

8、同。也就是说,结构中也可以定义函数,但不像类中定 义的函数那样都有一个隐藏的 this 指针。另外,结构中的静态变量,对成员的引用方式,都与类相 同。结构同样可以使用访问权限限定符来限定成员的访问属性,只是在默认情况下结构的成员访问 属性为 public,而类成员默认为 private。 成员函数响应响应对象接收的消息消息(message) 。所谓消息是指函数对对象的调用(也说对象调用函数) , 这样的一种调用就是消息,而响应是指成员函数的执行。引自教材“消息对应于一个对象发给另一 个对象或由函数发给对象的成员函数调用” 。 4 注意,类的 public 成员函数往往又称 public 服务、

9、public 行为、类的接口等,类的客户使用这 些函数操作该类的数据。类的客户客户是指像 main 函数这样使用类提供的功能的对象。当不显示声明 类的成员访问方式的时候,默认为 private 方式访问,但提倡显式声明。 类定义包含类的数据成员和成员函数的声明。类的数据成员无法在类体中声明时初始化,而要用类 的构造函数初始化,也可以用给它们设值的成员函数赋值;成员函数的声明就是声明函数原型,成 员函数可以在类的内部定义,但在类的外部定义函数是个良好的习惯。类定义外定义成员函数需要 加上二元作用域运算符与类名联系起来,惟一标识某个类的成员函数。 尽管类定义中声明的成员函数可以在类定义之外定义,但

10、成员函数的定义仍然在(属)类范围 (classs scope,在类外定义的成员函数定义体也称类范围) 。在类范围中,类成员可由该类的 所有成员函数直接访问;在类范围外,类成员是通过一个对象的句柄引用,可以是对象名、对象引 用(引用对象)或对象指针(指针对象) 。每次引用对象中的数据成员和成员函数时,编译器自动 插入一个隐式句柄,这个隐式句柄即 this 指针。看下面代码: class Base public: Base(int x) value = x; int getData() const ; private: int value; ; Base:getData() const retur

11、n value; /在类体外定义的成员函数定义体也属于类范围,在类范围中直接访问类成员 value. void main(void) Base b(59); coutsetValue(v); int Interface:getValue() const return ptr-getValue(); /fig07_10.cpp #include #include “interface.h“ int main() Interface i(5); cout)和()和流读取(istream 当编译器遇到表达式: cinphone;(phone 为 PhoneNumber 类的一个对象) 编译器将生成函

12、数调用:operator(cin,phone); 当执行该调用时,引用参数 input 成为 cin 的一个别名,num 成为 phone 的一个别名。 再来讨论一下返回值,返回值一般要声明为 ostream(或 istream)类型的引用,代码中要用 return 语句返回 cin 或 cout 的引用,即 return output 或 return input,这样可以连续使用流运算符, 格式如:coutabc; 比如 cinabc,首先表达式 cina,调用函数 operator(cin,a),返回 input 的引用即 cin,原表达现在变成 cinbc,依此类推。 当然函数首部中可

13、以不用声明返回值类型为流类型的引用,即删除 ostream 声明了一个重载的强制类型转换运算符函数,它根据用户自定义类型 A 的对象建立一个临时的 char*类型的对象。 如果 s 是某个类对象,当编译器遇到表达式(char*)s 时,会产生函数调用 s.operator char*(), 操作数 s 是调用成员函数 operator char*的类对象 s。也就是说转换运算符转换运算符相当于是一个一元运算 符,它被重载为一个没有参数的非 static 成员函数,它的操作数就是调用它的对象。 注意:转换运算符重载函数不能指定返回类型,因为它的类型已经被定为要转换后的对象类型。 看下面代码在做什

14、么: A:operator int() const; A:operator otherClass() const; 声明了两个转换运算符,分别用来把用户自定义类型 A 的对象转换为一个整数和用户自定义类型 otherClass 的对象。 转换运算符的一个很好的特点就是:当需要的时候,编译器可以为建立一个临时对象而自动地调用 这些函数。例如,如果用户自定义类 String 的某个对象 s 出现在程序中需要使用 char*类型的对 象的位置上,例如: cout class String friend ostream public: String(const char * = “”);/构造函数。在

15、生成类对象时若不给出参数,则取构造函数提供的默认 值来调用构造函数。 String(const String /复制构造函数。 /注意构造函数的参数,赋予传递进来的引用参数常量性,参数在本函数中是不可以被修改的。即不可以通过 形参来改变实参的值。 /但这不要求传递进来的引用本身(即实参)是带常量性。const 引用参数是“最快捷又安全”的传递方式。 详见“参数传递” 。 String(); const String /运算符重载函数 operator=,注意函数返回值为 const 常量, /这主要用在返回值为自定义对象上,表示函数表达式 不可以作左值。 const String bool o

16、perator!() const;/小括号与大括号之间的 const 声明为常量函数。用于调用常量对象。 bool operator=(const String bool operator(const String /重载运算符函数。 const char /重载运算符函数的 const 版本。详见“const 总结” 。 /根据 String 对象是否为 const 类型而使用相应的 operator版本。 String /重载()运算符函数。 int getLength() const; private: int length; char *sPtr;/字符串对象的核心:字符指针。 void setString(const char*); ; /string1.cpp #include 16 #include #include #include #include“st

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号