第8章 类与对象(一).ppt
25页第8章类与对象 一 8 1简介8 2类的定义8 3对象8 4多文件程序组织 了解 8 5动态内存分配8 6对象的赋值运算问题 8 1简介 一 面向过程 的程序设计思路 二 面向对象 的程序设计中引入概念 1 类 2 属性 3 行为 4 对象 三 面向对象 的程序设计思路 1 确定类 由用户自定义 明确该类事物所共有的属性及行为 在C 中 类是将数据和函数封装在一起的一种数据结构 用类定义对象 并编程 8 2类的定义 一 类的定义 1 包含说明部分和类的实现两部分 2 类定义的格式 说明部分class类名 private 数据成员和成员函数 protected 数据成员和成员函数 public 数据成员和成员函数 实现部分 成员函数和数据成员统称为类成员三种访问限 private protected public classstudent private intnum 数据成员的说明floatscore public student inta floatb 成员函数声明voidprint 成员函数声明 student student inta floatb 类体外实现定义 num a score b voidstudent print 类体外实现定义 cout num score 3 几点说明 1 用关键字class声明类 2 三种访问权限 private成员只能被本类的成员函数和友元函数访问 protected成员可以被本类成员函数 友元函数 派生类成员函数访问 public成员可以被程序的任何函数访问 类中成员默认访问权限为private 类的三种成员的顺序可以调换 不是固定的 3 类的数据成员必须在类体内定义 在类体内不能进行初始化 在定义对象时完成初始化工作 4 类的成员函数的具体定义一般放在类体外的实现部分 只有当函数体内容比较简短是才放在类体内定义 类内定义 类外实现 classstudent private intnum 数据成员 表示学生学号intscore 数据成员 表示学生分数public student inta intb 成员函数 完成对数据成员的初始化 num a score b voidprint 成员函数 完成输出学号和分数 cout num score endl 类的成员函数的实现方式 类外实现例如 说明 1 成员函数在类外实现时格式为 函数返回值类型类名 函数名 形参列表 函数体语句 2 成员函数在类内定义并实现也可以 此时这些作为了内联函数 在类体外定义的函数如果要作为内联函数的话 要在定义的头部加上inline 3 用类定义对象 对象的初始化要调用构造函数 格式 类名对象名 4 调用对象的成员的格式 对象名 成员函数名 实参列表 对象名 数据成员名 classstudent private intnum 数据成员的说明floatscore public student inta floatb 成员函数声明voidprint 成员函数声明 student student inta floatb 类体外实现定义 num a score b voidstudent print 类体外实现定义 cout num score voidmain studentzhangsan 1 89 zhangsan print 五 成员函数的分类 按功能分为构造函数 析构函数 访问函数和工具函数 一 构造函数 功能 完成数据成员的初始化 对各属性赋值 特点 分类 初始化构造函数 负责对类的所有数据成员进行初始化工作 默认构造函数 如果类体内定义了一个不带任何参数的构造函数 该构造函数称为默认构造函数 或者在类中没有定义任何的构造函数 系统会自动生成默认构造函数 这样的构造函数什么工作都不做 带默认参数的构造函数 复制构造函数 用同类对象来初始化当前生成的对象 构造函数名与类名相同 构造函数没有返回值 构造函数可以重载 即在一个类中可以有多个构造函数 构造函数在定义类的对象时由系统自动调用 不能由程序员显式调用 初始化构造函数 在定义类的对象时 在对象名后用一对小括号直接将类的数据成员的初始化实参值列出 由系统自动 根据实际参数的个数和类型 调用相应的构造函数 1 普通形式 includeclassstudent private intnum 数据成员 表示学生学号intscore 数据成员 表示学生分数public student inta intb 成员函数 完成对数据成员的初始化 num a score b voidprint 成员函数 完成输出学号和分数 cout num score endl voidmain studentzhangsan 1 89 zhangsan print 初始化构造函数 2 初始化值列表 的形式 includeclassCylinder public Cylinder intl intw inth length l width w height h intvolume voidprint private intlength intwidth intheight intCylinder volume returnlength width height voidCylinder print cout cylinder endl cout length length endl cout width width endl cout height height endl voidmain Cylinderobj1 10 8 9 obj1 print cout Cylinder svolumeis obj1 volume endl 默认构造函数 1 默认构造函数的特点 一个类只能有一个默认的构造函数 什么时候调用默认的构造函数 当定义对象时没有给出初始化实参值时 则系统会查找类中有无定义默认的构造函数 如果有则调用它 如果没有则系统自动生成一个默认的构造函数 只是他什么工作也不做 includeclassstudent private intnum 数据成员 表示学生学号intscore 数据成员 表示学生分数public student 成员函数 完成对数据成员的初始化 cout 调用默认的构造函数 voidprint 成员函数 完成输出学号和分数 cout num score endl voidmain studentzhangsan 带默认参数的构造函数 includeclassTime public Time int 0 int 0 int 0 在对成员函数进行声明时 对各个参数进行设置默认值 voidprinttime private inthour intminite intsecond Time Time inth intm ints hour h minite m second s voidTime printtime cout hour 10 0 hour minite 10 0 minite second 10 0 second endl voidmain Timet1 13 20 25 t2 2 10 t3 10 t4 cout t1is t1 printtime cout t2is t2 printtime cout t3is t3 printtime cout t4is t4 printtime 复制构造函数 includeclassCylinder public Cylinder intl intw inth length l width w height h 构造函数Cylinder constCylinder 特点 1 只有一个参数 为同类对象引用 2 每个类中都有一复制构造函数 其作用只是实现简单的数据成员复制 系统可以自己生成 3 何时调用复制构造函数 当一个新对象被另一个已经存在的同类型对象初始化时候 其他情况了解即可 二 析构函数 特点 与类同名 在函数名前加 以便和构造函数进行区分 没有返回值 没有参数 不能重载 当对象消亡时候由系统自动调用 不能由程序员显示调用 类中无析构函数时 系统会自动产生一个默认的不执行任何操作的析构函数 例题 includeclassstudent private intnum floatscore public student voidprint student student student cout 创建对象系统自动调用构造函数 endl voidstudent print cout num score student student cout 对象结束系统自动调用析构函数 endl voidmain studentzhang 三 访问函数 功能 类提供的 服务 或者叫做 接口 外界函数通过这些函数来操作对象的属性值 包括向外界提供的读取数据成员值的函数 通常称为 get类函数 包括向外界提供的修改数据成员值的函数 通常称为 set类函数 包括向外界提供的打印数据成员值的函数 通常称为 print类函数 includeclassCylinder public Cylinder intl intw inth length l width w height h voidprint voidset private intlength intwidth intheight voidCylinder print cout length length endl cout width width endl cout height height endl voidCylinder set length 11 width 11 height 11 voidmain Cylinderobj1 10 8 9 obj1 set obj1 print 四 工具函数 通常声明为private的函数 只能被本类中的其他成员函数或友元函数所调用 用来完成特定的工作 外界函数不能使用 includeclasssalesperson public salesperson voidsetsalesnumber 设置销售号voidsetsales 设置12个月的销售额voidprintsalesperson 打印private intsalesnumber 销售号floatsales 12 每月销售额floattotalsales 计算总销售额 工具函数 floatsalesperson totalsales floattotal 0 0 for inti 0 i 12 i total sales i returntotal voidmain salespersonp p setsalesnumber p setsales p printsalesperson salesperson salesperson salesnumber 0 for inti 0 i n salesnumber n voidsalesperson setsales cout sales i voidsalesperson printsalesperson cout number salesnumber endl for inti 0 i 12 i cout i 1 cout sales i endl cout totalsales totalsales endl 8 3对象 一 对象的定义和引用1 定义格式为 类名对象名 初始化值列表 2 对象成员的引用 使用成员运算符 对象名 数据成员名对象名 成员函数名 实参列表 二 对象指针和成员引用1 对象指针的定义 类名 对象指针名 2 对象指针的赋值 3 成员的引用 对象指针名 数据成员名 或成员函数名 对象指针名 数据成员名 或成员函数名 4 例题 includeclassstudent private intnum intscore public student inta intb num a score b vo。





