谷第三章面向对的程序设计 本章导读 掌握类与对象的概念,类与对象的定义方法及二者间 的区别。 掌握类的成员函数的定义方法、保存方法及调用方法 掌握类中成员的访问机制和方法。 ■了解对象的作用域和生存期。 ■理解并掌握构造函数、析构函数、拷贝构造函数、默 认构造函数和缺省参数的构造函数的含义、定义方法以 及在对象的构造和撤消中的作用 理解并掌握当一个类的对象作为另一个类的数据成员 时,利用初始化表调用构造函数的方法、构造函数的执 行顺序 U回
返回 1 第三章 面向对象的程序设计 本章导读 掌握类与对象的概念,类与对象的定义方法及二者间 的区别。 掌握类的成员函数的定义方法、保存方法及调用方法。 掌握类中成员的访问机制和方法。 了解对象的作用域和生存期。 理解并掌握构造函数、析构函数、拷贝构造函数、默 认构造函数和缺省参数的构造函数的含义、定义方法以 及在对象的构造和撤消中的作用。 理解并掌握当一个类的对象作为另一个类的数据成员 时,利用初始化表调用构造函数的方法、构造函数的执 行顺序
本章导读 ■理解继承的概念和意义,理解单一继承、多重继承。理 解并掌握派生类构造函数的编写要求,以及派生类对象的 构造过程和机理 掌握虚函数和多态性的概念,掌握虚函数的定乂方法、 调用方法及其在实现多态性方面所起到的作用。了解纯虚 函数与抽象基类的概念 ■了解类的静态成员(静态数据成员和静态成员函数)的 概念、定义方法及其作用 了解友元函数与友元类的概念、定义方法及其作用。 ■了解运算符重载及在程序中实现运算符重载的方法。 ˉ了解模板的概念,在程序中如何定义类模板和函数模板。 U回
返回 2 本章导读 理解继承的概念和意义,理解单一继承、多重继承。理 解并掌握派生类构造函数的编写要求,以及派生类对象的 构造过程和机理。 掌握虚函数和多态性的概念,掌握虚函数的定义方法、 调用方法及其在实现多态性方面所起到的作用。了解纯虚 函数与抽象基类的概念。 了解类的静态成员(静态数据成员和静态成员函数)的 概念、定义方法及其作用。 了解友元函数与友元类的概念、定义方法及其作用。 了解运算符重载及在程序中实现运算符重载的方法。 了解模板的概念,在程序中如何定义类模板和函数模板
31类与对象的定义 类和对象是面向对象程序设计(OOP)的两个最基本 概念。所谓对象就是客观事物在计算机中的抽象描述; 类是对具有相似属性和行为的一组对象的统一描述。 311类的定义 C++的类是在结构体的基础上扩充而来的。类是把各 种不同类型的数据(称为数据成员)和对数据的操作 (成员函数)组织在一起而形成的用户自定义的数据类 型 C++中,类定义包括类说明和类实现两大部分。说明 部分提供了对该类所有数据成员和成员函数的描述,而 实现部分提供了所有成员函数的实现代码。 U回
返回 3 3.1 类与对象的定义 类和对象是面向对象程序设计(OOP)的两个最基本 概念。所谓对象就是客观事物在计算机中的抽象描述; 类是对具有相似属性和行为的一组对象的统一描述。 3.1.1 类的定义 C++的类是在结构体的基础上扩充而来的。类是把各 种不同类型的数据(称为数据成员)和对数据的操作 (成员函数)组织在一起而形成的用户自定义的数据类 型。 C++中,类定义包括类说明和类实现两大部分。说明 部分提供了对该类所有数据成员和成员函数的描述,而 实现部分提供了所有成员函数的实现代码
3.1类与对象的定义 类定义的一般形式为 lass类名 private 数据成员或成员函数 protected 数据成员或成员函数 publIc 数据成员或成员函数 各成员函数的实现代码> U回
返回 4 3.1 类与对象的定义 类定义的一般形式为: class 类名 {private: 数据成员或成员函数 protected: 数据成员或成员函数 public: 数据成员或成员函数 };
31类与对象的定义 说明: 1.clas是定义类的关键字,类名由用户自己定名,必须 是C++的有效标识符,但一般首字母大写。 2.大括号的部分是类的成员(数据成员和函数成员 它们分成三部分,分别由 private、 public、 proctected三个 关键字后跟冒号来指定。这三部分可以任何顺序出现 且在一个类的定义中,这三部分并非必须同时出现。 1)如果数据成员或成员函数在类的 private部分那么 在类之外是不能存取的,只有类中的成员函数才能存取 privatel的数据成员和成员函数。 (2)在一个类的 public部分说明的数据成员或成员函数 可被程序中的任何函数或语句存取, public)成员多为成员 函数,用来提供一个与外界的接口,外界只有通过这个 接口才可以实现对 private成员的存取 U回
返回 5 3.1 类与对象的定义 说明: 1. class是定义类的关键字,类名由用户自己定名,必须 是C++的有效标识符,但一般首字母大写。 2. 大括号的部分是类的成员(数据成员和函数成员), 它们分成三部分,分别由private、public、proctected三个 关键字后跟冒号来指定。这三部分可以任何顺序出现, 且在一个类的定义中,这三部分并非必须同时出现。 (1)如果数据成员或成员函数在类的private部分,那么 在类之外是不能存取的,只有类中的成员函数才能存取 private的数据成员和成员函数。 (2)在一个类的public部分说明的数据成员或成员函数 可被程序中的任何函数或语句存取,public成员多为成员 函数,用来提供一个与外界的接口,外界只有通过这个 接口才可以实现对private成员的存取
3.1类与对象的定义 (3)在类的 protected部分说明的数据成员和成员函数是 不能在类之外存取的,只有类的成员函数及其子类(派 生类)可以存取 protected的成员。 (4)当定义类时,当未指明成员是哪部分时,默认是属 于 private成员,但一般不要采用默认形式 如:下例中定义描述图书的类定义 class Record i private / private成员 char bookname[20];/数据成员 bookname /用于表示图书的名称 int number;/数据成员 number,表示图书编号 U回
返回 6 3.1 类与对象的定义 (3)在类的protected部分说明的数据成员和成员函数是 不能在类之外存取的,只有类的成员函数及其子类(派 生类)可以存取protected的成员。 (4)当定义类时,当未指明成员是哪部分时,默认是属 于private成员,但一般不要采用默认形式。 如:下例中定义描述图书的类定义 class Record { private: //private成员 char bookname[20]; //数据成员bookname, // 用于表示图书的名称 int number; //数据成员number,表示图书编号
3.1类与对象的定义 bublIc / public成员 void regist(char*a,intb);∥成员函数 regist,用于给 /各数据成员赋值 void show;/成员函数how,显示各数据成员的值 3.要特别注意,在类的定义中,类的说明部分的右边大 括号后面必须有 4.根据类的定义,可看出:类是实现封装的工具,所谓 封装就是将类的成员按使用或存取的方式分类,有条 件地限制对类成员的使用,而封装是通过 public和 private与成员函数实现的。 privatel的成员构成类的内 部状态, public的成员则构成与外界通信的接口,通 过 publicl的成员函数来使用 privatel的数据成员,从而在 C++中实现了封装。 U回
返回 7 3.1 类与对象的定义 public: //public成员 void regist(char *a,int b); //成员函数regist,用于给 //各数据成员赋值 void show(); //成员函数show,显示各数据成员的值 }; 3. 要特别注意,在类的定义中,类的说明部分的右边大 括号后面必须有一 “;”. 4. 根据类的定义,可看出:类是实现封装的工具,所谓 封装就是将类的成员按使用或存取的方式分类,有条 件地限制对类成员的使用,而封装是通过public和 private与成员函数实现的。private的成员构成类的内 部状态,public的成员则构成与外界通信的接口,通 过public的成员函数来使用private的数据成员,从而在 C++中实现了封装
3.1类与对象的定义 312成员函数的定义 类中的成员函数可以在以下两处定义 (1)将成员函数的定义直接写在类中: 如:对于前面定义的图书类 Record来说,其成员函数 regist和show的定义可直接写在类的定义体中。 class record i private char bookname 201 int number U回
返回 8 3.1 类与对象的定义 3.1.2 成员函数的定义 类中的成员函数可以在以下两处定义: (1)将成员函数的定义直接写在类中: 如:对于前面定义的图书类Record来说,其成员函数 regist和show的定义可直接写在类的定义体中。 class Record { private: char bookname[20]; int number;
3.1类与对象的定义 public void regist(char*a,intb)∥成员函数 regist)的定义 strcpy( bookname,a);/给数据成员 bookname赋值 number =b;/给数据成员 number 赋值 void showt)∥成员函数 show(的定义 cout<”名称:”< cbooknames<endl; cout<<3号码:”<< number<<endl; U回
返回 9 3.1 类与对象的定义 public: void regist(char *a,int b) //成员函数regist()的定义 { strcpy(bookname,a); //给数据成员bookname赋值 number=b; //给数据成员number赋值 } void show() //成员函数show()的定义 { cout<<”名称:”<<bookname<<endl; cout<<”号码:”<<number<<endl; } };
3.1类与对象的定义 在类中直接定义成员函数的情况一般适合于成员函数规 模较小的情况,也就是说它们一般为内联函数,即使没有 明确用 linline关键字。 (2)在类的定义体中只写出成员函数的原型说明,而成员 函数的定义写在类的定义之后,这种情况比较适合于成员 函数体较大的情况,但这时要求在定义成员函数时,在函 数的名称之前加上其所属性类名及作用域运算符“” 定义成员函数的一般类型为 返回值类型类名::成员函数名(参数说明) 类体} U回
返回 10 3.1 类与对象的定义 在类中直接定义成员函数的情况一般适合于成员函数规 模较小的情况,也就是说它们一般为内联函数,即使没有 明确用inline关键字。 (2)在类的定义体中只写出成员函数的原型说明,而成员 函数的定义写在类的定义之后,这种情况比较适合于成员 函数体较大的情况,但这时要求在定义成员函数时,在函 数的名称之前加上其所属性类名及作用域运算符“ ::” 。 定义成员函数的一般类型为: 返回值类型 类名::成员函数名(参数说明) { 类体 }