260 likes | 382 Views
第 1 章 C++ 程序设计基础. 网络游戏开发 -C++ 程序设计. 第 7 章类的概念与定义. 类的静态成员和常量成员 友元类 运算符重载. 友元类. 类的静态成员和常量成员 运算符重载. 理解类的静态成员和常量成员 理解友元类 掌握运算符重载. 第 7 章 类的概念与定义. 7.2 C++ 语言中的类. 7.2.1 静态成员和常量成员. 1 .静态成员的概念及使用. 加了“ static ”关键字,则此成员就是静态成员。 静态成员可以是静态数据成员和静态函数成员。. class person { public :
E N D
第1章 C++程序设计基础 网络游戏开发-C++程序设计
第7章类的概念与定义 类的静态成员和常量成员 友元类 运算符重载 友元类 类的静态成员和常量成员 运算符重载 理解类的静态成员和常量成员 理解友元类 掌握运算符重载
第7章 类的概念与定义 7.2 C++语言中的类 7.2.1 静态成员和常量成员 1.静态成员的概念及使用 • 加了“static”关键字,则此成员就是静态成员。 • 静态成员可以是静态数据成员和静态函数成员。 class person { public : static int personCount; static int GetPersonCount() { return personCount; } }; 类的静态成员为其所有对象所共享,不管有多少对象,静态成员只有一份存于公用内存中。
第7章 类的概念与定义 7.2 C++语言中的类 7.2.1 静态成员和常量成员 1.静态成员的概念及使用 • 类的静态成员为其所有对象所共享,不管有多少对象,静态成员只有一份存于公用内存中。 • 在类中说明的静态数据成员属于引用性说明。 必须在类外文件作用域中的某个地方对静态数据成员按如下格式进行定义性说明 类型类名::静态数据成员 = 初值;
第7章 类的概念与定义 7.2 C++语言中的类 7.2.1 静态成员和常量成员 1.静态成员的概念及使用 静态成员是属于类的。
第7章 类的概念与定义 7.2 C++语言中的类 7.2.1 静态成员和常量成员 1.静态成员的概念及使用 静态成员的访问方法: 静态成员可以不通过对象访问,而是通过类访问,即使没有创建任何对象: cout<<p.getx( )<<" "<<q.gety( ); cout<<point::gety( );
第7章 类的概念与定义 7.2 C++语言中的类 7.2.1 静态成员和常量成员 1.静态成员的概念及使用 静态关键字用于声明: • 局部静态变量 • 全局静态变量 • 具有静态存储类别的函数 • 类的静态数据成员 • 类的静态函数成员
第7章 类的概念与定义 7.2 C++语言中的类 7.2.1 静态成员和常量成员 1.静态成员的概念及使用 1)局部静态变量 • 函数或块的内部说明的静态变量 • 作用域仅局部于函数或块 2)全局静态变量 • 在所有函数的外部说明 • 具有单文件级全局性的静态变量
第7章 类的概念与定义 7.2 C++语言中的类 7.2.1 静态成员和常量成员 1.静态成员的概念及使用 3)静态函数 • 具有静态存储类别的函数(有时也称为内部函数) • 只能在本文件的内部被调用 • 在其他文件中不能调用这种函数 4)类的静态数据成员 • static 修饰的类中的数据成员。 • 为该类的所有对象所共享
第7章 类的概念与定义 7.2 C++语言中的类 7.2.1 静态成员和常量成员 1.静态成员的概念及使用 5)类的静态函数成员 • 由关键字static 修饰的类中的函数成员 • 类的静态函数成员没有this指针 • 通常只在其中处理类的静态数据成员值 静态数据成员 √ √ 非静态成员函数 静态成员函数 x √ 非静态数据成员
第7章 类的概念与定义 7.2 C++语言中的类 7.2.1 静态成员和常量成员 2.常量成员 加了“const”关键字,则此成员就是常量成员。 • 常量数据成员 • 只能在对象被说明时通过构造函数的成员初始化列表的方式来赋初值 • 一旦对象被创建,其常量数据成员的值就不允许被修改
第7章 类的概念与定义 7.2 C++语言中的类 7.2.1 静态成员和常量成员 2.常量成员 • 常量函数成员 • 类的函数成员也可以被说明为常量类型。 • 常量类型的函数成员只有权读取相应对象(即调用者对象*this)的内容,但无权修改它们。 类型说明符函数名(参数表) const; 修饰符const要加在函数说明的尾部(若放在首部的话,则是对函数值的修饰),它是函数类型的一部分。
第7章 类的概念与定义 7.2 C++语言中的类 7.2.2 友元函数和友元类 1.友元的性质和作用 面向对象程序设计主张程序的封装,数据的隐藏 友元的概念是C++语言为用户提供的在局部打破这种封装和隐藏的手段 friend 说明友元 • 位于一个函数说明语句之前,指出该函数为这个类的友元函数; • 位于一个类名之前,指出该类是这个类的友元类。
第7章 类的概念与定义 7.2 C++语言中的类 7.2.2 友元函数和友元类 1.友元的性质和作用 class A { … friend int f(int a); … friend class B; … }; 在类A 中说明的友元的特点: 1)它不是A 的函数成员; 2)f 的定义可以在类A 的说明内,也可以在类外; 3)函数f 虽不是A 的成员,但有权访问和调用A 的所有私有及保护成员。
第7章 类的概念与定义 7.2 C++语言中的类 7.2.2 友元函数和友元类 1.友元的性质和作用 在类A 中说明的友元类B如下所示: 1)它可能是与A 无关的另外一个类; 2)要在类外说明; 3)B 的任一函数都有权访问和调用类A 的所有成员,包括私有及保护成员。
第7章 类的概念与定义 7.2 C++语言中的类 7.2.2 友元函数和友元类 1.友元的性质和作用 ClassB 友元的特点: 1)“单方向” 2)“不继承” 3)“不传递” ClassD: public B 友元 友元 ? ? ? ClassC ClassA
第7章 类的概念与定义 7.2 C++语言中的类 7.2.2 友元函数和友元类 2. 友元的使用 class complex { //自定义的复数类型complex double real; //复数实部 double imag; //复数虚部 public: complex(); //无参构造函数 complex(double r, double i); //2 参构造函数 friend complex addCom(complex c1, complex c2); friend void outCom (complex c); //友元函数,输出complex 类对象c 的有关数据(各分量) };
第7章 类的概念与定义 7.2 C++语言中的类 7.2.3 运算符重载 1.运算符重载的使用范围 C++语言规定,大多数运算符都可以重载。 • 单目运算
第7章 类的概念与定义 7.2 C++语言中的类 7.2.3 运算符重载 1.运算符重载的使用范围 • 双目运算
第7章 类的概念与定义 7.2 C++语言中的类 7.2.3 运算符重载 1.运算符重载的使用范围 前缀++: <类型>operator ++ ( ) //作为类成员 <类型>operator ++(<类型>) //作为类外函数 后缀++: <类型>operator ++ (int) //作为类成员 <类型>operator ++(<类型>,int) //作为类外函数
第7章 类的概念与定义 7.2 C++语言中的类 7.2.3 运算符重载 2. 运算符重载函数的定义 bool operator + (bool a ,bool b) { if((a==FALSE)&&(b==FALSE)) return FALSE; return TRUE; } bool operator*(bool a,bool b) { if((a==TRUE)&&(b==TRUE)) return TRUE; return FALSE; } bool operator-(bool a) { if(a==FALSE) return TRUE; return FALSE; }
第7章 类的概念与定义 7.2 C++语言中的类 7.2.3 运算符重载 3.重载运算符的调用 运算符重载函数的调用有以下3种方式: 1)与原运算符相同的调用方式, 如b1+b2,b1*b2等; 2)一般函数调用方式,如b1+b2,也可以写为operator+(b1,b2)被重载的运算符的调用方式,优先级和运算顺序都与原运算符一致,其运算分量的个数也不可改变; 3)运算符重载主要用于用类的形式定义的用户定义类型
第7章 类的概念与定义 小结 本章主要讲解C++面向对象基础知识 • 类的静态成员和常量成员 • 友元类 • 运算符重载
第7章 类的概念与定义 自测题 1.C++只能做面向对象的程序开发,而不能做面向过程的程序开发。() 2.析构函数和构造函数都是可以重载的。() 3.类中的数据成员默认类型为私有。() 4.友员函数不能直接访问类中的私有成员,只能通过对象访问私有成员。()
第7章 类的概念与定义 自测题 1.C++只能做面向对象的程序开发,而不能做面向过程的程序开发。(X ) 2.析构函数和构造函数都是可以重载的。(X ) 3.类中的数据成员默认类型为私有。( √ ) 4.友员函数不能直接访问类中的私有成员,只能通过对象访问私有成员。( √ )
第7章 类的概念与定义 课后作业 【作业1】 .编写一个程序,已有若干个学生数据,这些数据包括学号、姓名、语文成绩、数学成绩和英语成绩,求各门功课的平均分。要求设计不同的成员函数求出各门课程的平均分,并使用成员函数指针调用它们。 【作业2】 .设计一个类Sample,实现两个复数的乘法运算。