第7讲类的定义及类成员的引用 教学目的与要求: 了解从结构体到类的概念。 掌握类的定义格式,类成员引用方法 教学内容提要: 1、从结构体到类; 2、类的声明; 3、对象的声明 4、对象赋值语句; 5、类的作用域 教学重点:类的定义,类成员引用方法 教学难点:类的定义,类成员引用方法。 教学进度:P49~P61 教学过程
第7讲 类的定义及类成员的引用 •教学目的与要求: 了解从结构体到类的概念。 掌握类的定义格式,类成员引用方法。 •教学内容提要: 1、从结构体到类; 2、类的声明; 3、对象的声明; 4、对象赋值语句; 5、类的作用域; •教学重点:类的定义,类成员引用方法。 •教学难点:类的定义,类成员引用方法。 •教学进度:P49~P61 •教学过程:
类是C++语言面向对象程序设计的基础,在C+语言面向 对象程序设计中占据着核心地位。在面向对象的程序设计中 三CH程序就是由类的实例一对象构成的 本章将详细介绍有关类及对象的基本知识,并开始采用面 对象程序设计方法进行C艹编程 71从结构体到类】 ◆在C语言中结构体中可以含有各种不同类型的数据。 ◆在C++中对结构体进行扩充,不仅可以含有不同类型的 数据(数据成员),而且可以含有函数(成员函数)。 ◆C艹规定,在默认情况下,结构体中的成员都是公有的, 在任何函数中都可以访问
类是C++语言面向对象程序设计的基础,在C++语言面向 对象程序设计中占据着核心地位。在面向对象的程序设计中, C++程序就是由类的实例——对象构成的。 本章将详细介绍有关类及对象的基本知识,并开始采用面 向对象程序设计方法进行C++编程。 【 7.1 从结构体到 类】 ◆在C语言中结构体中可以含有各种不同类型的数据。 ◆在C++中对结构体进行扩充,不仅可以含有不同类型的 数据(数据成员),而且可以含有函数(成员函数)。 ◆C++规定,在默认情况下,结构体中的成员都是公有的, 在任何函数中都可以访问
例71有关日期结构的例子 #include struct Date i int year, int month int day; void printo i cout<<year<<"."<<month <day<send void maino Date datel: datel vear=2003 datel. month=8 datel day=25; datel printo;
例7.1有关日期结构的例子。 #include struct Date { int year; int month; int day; void print( ) { cout<<year<<"."<<month <<"."<<day<<endl; } }; void main() { Date date1; date1.year=2003; date1.month=8; date1.day=25; date1.print( ); }
72类的声明】 类也是一种用户自定义数据类型。它不仅包含不同数据类型的变量,还包 含了对这些变量数据进行操作的函数。 类是一组变量及其相关函数的组合。类中的变量称为类的成员变量或数据 成员;函数称为类的函数成员或方法。 类的声明形式如下: class类名 是新建类的名称,它 是一个标识符。 指明了这里声 public: 明的是一个类 若干成员; 类型。 protected: 若干成员; 花括号内列出的是类的成员, p rivate. 包括数据成员和成员函数。 若干成员; 成员函数用于处理数据成员,从而描述类的行为,在类的声明内一般只声 明其函数原型,在类外定义函数的实现
类也是一种用户自定义数据类型。它不仅包含不同数据类型的变量,还包 含了对这些变量数据进行操作的函数。 类的声明形式如下: class 类名 { public: 若干成员; protected: 若干成员; private: 若干成员; }; 类是一组变量及其相关函数的组合。类中的变量称为类的成员变量或数据 成员;函数称为类的函数成员或方法。 成员函数用于处理数据成员,从而描述类的行为,在类的声明内一般只声 明其函数原型,在类外定义函数的实现。 指明了这里声 明的是一个类 类型。 是新建类的名称,它 是一个标识符。 花括号内列出的是类的成员, 包括数据成员和成员函数。 【 7.2 类的声明】
公有成员:用关键字 public声明,其中的成员一般是 成员函数,用于定义类的外部接口,在程 序中的任何部分都可以访问。 类成员按访问权私有成员:可用关键字 privatel声明,其中成员一般是 限控制分类 数据成员,用于描述类的属性,它们只能 被类自身的成员函数访问。类的成员在默 认情况下都是私有的。 保护成员:用关键字 protected声明。它们只能被类自 身的成员函数访问或派生类的成员函数访问 如果一个成员函数只供类中的其他成员函数调用,也应该声明为私有的。 在类的声明中,关键字 public、 protected和 privatel的出现顺序是任意的 可以不出现或多次出现。类中的每个成员只能有一种特定的访问属性。 例7.2声明“圆柱体”的类 class cylinder
如果一个成员函数只供类中的其他成员函数调用,也应该声明为私有的。 在类的声明中,关键字public、protected和private的出现顺序是任意的, 可以不出现或多次出现。类中的每个成员只能有一种特定的访问属性。 声明 “圆柱体”的类 class Cylinder { 公有成员:用关键字public声明,其中的成员一般是 成员函数,用于定义类的外部接口,在程 序中的任何部分都可以访问。 私有成员:可用关键字private声明,其中成员一般是 数据成员,用于描述类的属性,它们只能 被类自身的成员函数访问。类的成员在默 认情况下都是私有的。 保护成员:用关键字protected声明。它们只能被类自 身的成员函数访问或派生类的成员函数访问。 类成员按访问权 限控制分类 例 7.2
public ∥公有成员,声明类的外部接口 void setcylinder( doubler; double h);∥成员函数,用来设置圆柱体的半径 和高 double getradiuso; ∥成员函数,用来获取圆柱体的半径 double getheightO ∥成员函数,用来获取圆柱体的高 double volumed; ∥成员函数,用来计算圆柱体的体积 double surface area o; ∥)员函数,用来计算圆柱体的表面 积 private: 有成员 double radius 数据成员,声明圆柱体的半径 double height 数据成员,声明圆柱体的高 说明:把数据成员都声明为私有,并另外建立 getradius0、 getheight0及 setcylindery(函数来访间这些私有数据成员。使得程序的其他部分对数据成 员的访问只能通过公有成员函数来进行,因而数据成员类型改变所产生的 影响被控制在类的内部,对程序的其他部分没有影响。 注把私有成员的声明放在了最前面,注意这里省略了关键字 Private (续)
public: //公有成员,声明类的外部接口 void setcylinder(double r,double h); //成员函数,用来设置圆柱体的半径 和高 double getradius(); //成员函数,用来获取圆柱体的半径 double getheight(); //成员函数,用来获取圆柱体的高 double volume(); //成员函数,用来计算圆柱体的体积 double surface_area(); //成员函数,用来计算圆柱体的表面 积 private: //私有成员 double radius; //数据成员,声明圆柱体的半径 double height; //数据成员,声明圆柱体的高 }; 注 把私有成员的声明放在了最前面,注意这里省略了关键字private。 说明:把数据成员都声明为私有,并另外建立getradius()、getheight()及 setcylinder()函数来访问这些私有数据成员。使得程序的其他部分对数据成 员的访问只能通过公有成员函数来进行,因而数据成员类型改变所产生的 影响被控制在类的内部,对程序的其他部分没有影响。 (续)
例73在声明类时把私有成员放在最前面 class cvlinder ∥有成员 double radius: double height; public ∥公有成员 void setcylinder(doubler, double h); double getradius(; double getheighto double volume; double surfacearea(; 在声明类时,一般来说应该把类的所有数据成员都声明为私有的,同时声明 公有成员函数来访问这些数据成员 注在类内不允许对声明的数据成员进行初始化
在声明类时把私有成员放在最前面 class Cylinder { //私有成员 double radius; double height; public: //公有成员 void setcylinder(double r,double h); double getradius(); double getheight(); double volume(); double surfacearea(); }; 在声明类时,一般来说应该把类的所有数据成员都声明为私有的,同时声明 公有成员函数来访问这些数据成员。 注 在类内不允许对声明的数据成员进行初始化。 例 7.3
例7.4不能在声明类时给数据成员赋初值 class cylinder public void setcylinder(doubler, double h); double getradiuso; double getheighto; double volume; double surfacearea private double radius (5.0) ∥错误,不能在类中给数据成员赋初值 double height=10.0 ∥错误,不能在类中给数据成员赋初值 对于成员函数,类的声明内一般只声明其函数原型,具体实现要在类外定义 它的一般格式如下: 返回值类型类名::成员函数名(参数表) 函数体 叫作用域运算符,它标明所 要定义的函数属于哪个类
对于成员函数,类的声明内一般只声明其函数原型,具体实现要在类外定义。 不能在声明类时给数据成员赋初值 class Cylinder { public: void setcylinder(double r,double h); double getradius(); double getheight(); double volume(); double surfacearea(); private: double radius(5.0); //错误,不能在类中给数据成员赋初值 double height=10.0; //错误,不能在类中给数据成员赋初值 }; 它的一般格式如下: 返回值类型 类名::成员函数名(参数表) { 函数体 } “::”叫作用域运算符,它标明所 要定义的函数属于哪个类。 例 7.4
例75“圆柱体”类成员函数的定义 void Cylinder: setcylinder(double r, double h) radIus-r, height=h; double cylinder: getradiuso return radius double cylinder: getheightO return height; double cylinder: volume double vol; vol=3. 1415926 radius*radius * height; return vol
“圆柱体”类成员函数的定义 void Cylinder::setcylinder(double r,double h) { radius=r; height=h; } double Cylinder::getradius() { return radius; } double Cylinder::getheight() { return height; } double Cylinder:: volume() { double vol; vol=3.1415926*radius*radius*height; return vol; } 例 7.5
double Cylinder: surfacearea double area; area=2*3. 1415926radius*height+2*3. 1415926radius radius: return area; 在定义类的成员函数时,也可以对参数设置默认值 例7.6在定义成员函数时可以为参数设默认值 void Cylinder: setcylinder(double r=0, double h=0) radius=r heighth 定义类的成员函数时,对一些只有一、二条语句的函数可以把函数定义成内 在类的声明中定义 内联成员函数的定义 在类外定义
double Cylinder::surfacearea() { double area; area=2*3.1415926*radius*height+2*3.1415926*radius*radius; return area; } 在定义类的成员函数时,也可以对参数设置默认值。 在定义成员函数时可以为参数设默认值 void Cylinder::setcylinder(double r=0,double h=0) { radius=r; height=h; } 定义类的成员函数时,对一些只有一、二条语句的函数可以把函数定义成内 联函数。 内联成员函数的定义 在类的声明中定义 在类外定义 例 7.6