[工学]C第3讲new
第三章 类 FTP 26 用户名:lcp 密码:无 类和对象 在C++中,一个类就是一种数据类型。 标准C++定义了一些内建的类,例如string。 通过创建自己的类,程序员可以对C++语言进行扩展。 通过类声明可以创建一个类,而且可将这个类当作数据类型来使用。 类和对象 类声明: 描述了封装在该类中的数据成员(data member)和成员函数(function member) 例如: 其中: class是个关键字,Human称为类标签 通过类声明创建了一个数据类型,类标签是该数据类型的标识符或名字。 类声明中的花括号“}”后的分号“;”不可少。 类和对象 对象定义: 从面向对象程序设计的角度来看,在C++中以一个类(如Human)作数据类型定义的变量就是对象。 例如,如下语句定义了Human的一个对象maryLeakey 定义对象时,关键字class是可有可无的,只要首先给出Human类的声明,就可通过以下两种方式定义Human类的对象: 类和对象 定义对象数组: C++的信息隐藏机制 三个关键字: private:可用来隐藏类的数据成员和成员函数 public:用来暴露类的数据成员和成员函数 protected 面向对象设计的灵魂就是使用private隐藏类实现,使用public暴露类的接口。 C++的信息隐藏机制 定义一个Person类 接口:包含两个公有成员函数setAge和getAge。 实现:一个unsigned类型的数据成员age。 C++的信息隐藏机制 C++的信息隐藏机制 Person类的客户(指Person类的对象的使用者)可通过调用公有成员函数setAge和getAge来请求Person类提供服务 Person类的客户不能访问属于类实现部分的私有数据成员age 成员选择符 成员选择符.和指针操作符-,可对类的数据成员和成员函数进行访问。 成员选择符 对象的使用者只能访问类的公有成员(数据成员或成员函数)。 类范围 类的私有成员仅能由类的成员函数访问,即具有类范围性质。 类的公有成员拥有公有范围性质,可以在类之外进行访问。 类范围 在C++中,用关键字class声明的类,其类成员在默认情况下作为私有成员处理,具有类范围性质。 因此,如下两个声明是等价的 关键字class和struct的区别 使用class关键字或struct 关键字都可以创建类。 如果使用class关键字,类成员在默认状态下是私有的; 而使用struct 关键字,类成员在默认状态下则是公有的。 如下两种声明方式是等价的: 类成员函数的定义 类成员函数的定义方法: 在类声明之外进行定义 在类声明之中进行定义(inline) 类成员函数的定义 在类声明之外进行定义 为避免重名,在定义成员函数时使用了域解析符:: 类成员函数的定义 在类声明之中进行定义(inline) 类成员函数的定义 通过在进行成员函数声明的时候使用inline关键字,可将原本定义在类声明之外的成员函数强制变成内联函数。 在程序中使用类 在程序中使用类 通常将类声明放到.h中,这样在使用时通过#include将类声明包含进来。 如可将Person类的声明放到person.h文件中 通常将成员函数的定义放到.cpp 中 如可将Person类的定义放到person.cpp中 一般不要将成员函数的定义放在.h文件中,因为头文件通过#include被多个不同的文件所包含的话可能出现函数重复定义错 示例程序:堆栈类 问题:创建一个支持int型的压入和弹出操作的堆栈类。 公有成员: 对stack对象进行初始化。 检查stack为空,或已满。 将整数压入到stack中。 从stack里弹出整数。 不移出任何元素,将stack的内容输出到标准输出。 私有成员: 一个用于打印错误信息的私有成员函数。 三个私有数据成员(top、数据数组、dummy_val) 效率和健壮性 通过引用来传递和返回对象 const类型参数的对象引用 const成员函数 对成员函数进行重载以便处理两种类型的字符串 通过引用来传递和返回对象 对象可以采用传值方式或引用方式进行对象的传递和返回。 一般来说应该采用引用方式进行对象的传递和返回,而不要采用传值的方式来进行 因为通过传值方式来传递和返回对象时会降低效率并将面临对象间的拷贝操作,从而使数据增大,浪费内存。 从效率上看,传递一个指向对象的指针可收到与引用方式相同的效果,但引用方式的语法要简练得多。 const类型参数的对象引用 const成员函数 const成员函数 const成员函数 const 返回 const 返回 const 返回 对成员函数进行重载以便处理两种类型的
原创力文档

文档评论(0)