C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.

Slides:



Advertisements
Similar presentations
移动应用软件开发技术 第二讲:C++编程基础
Advertisements

第 2 章 初探 C++.
清仓处理 跳楼价 满200返160 5折酬宾.
第九讲 类与对象 (I)面向对象基础.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
第八章 类和对象.
C++语言程序设计教程 第7章 类与对象 第7章 类与对象.
資料大樓 --談指標與陣列 綠園.
内容提要 对象的生命周期 构造函数 析构函数 拷贝构造函数. 常宝宝 北京大学计算机科学与技术系
C++语言程序设计 第四章 类与对象 成都信息工程学院计算机系.
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
Chap 9 结构 9.1 构建手机通讯录 9.2 结构变量 9.3 结构数组 9.4 结构指针.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第一章 程序的基本结构. 第一章 程序的基本结构 教材及授课结构 本章目标 基本内容 扩展阅读 上机指导 应用举例 习题.
第3章 继承和派生.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
程式撰寫流程.
第四章 小技巧.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
C++程序设计 string(字符串类) vector(容器类).
面向对象程序设计 QQ群: Object-Oriented Programming 汽车学院.
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
10 多載函數 10.1 多載概論 多載一般函數 多載成員函數 10-3
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
六、函数 教学目标: 函数的概念、定义、调用和返回 带自定义函数的程序设计 递推算法 递归思想及算法实现 函数的参数传递方式 C语言程序设计.
辅导课程八.
劉崇汎 崑山科技大學 電腦與通訊系 DLL的建立與引用 劉崇汎 崑山科技大學 電腦與通訊系
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
C++语言程序设计 C++语言程序设计 第五章 函数 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
物件導向程式設計 CH2.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
第三章 数据抽象.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++程式設計入門 變數與運算子 作者:黃建庭.
C++大学基础教程 第10章 运算符重载 北京科技大学 2019/5/7 北京科技大学.
第二章 类型、对象、运算符和表达式.
Review 1~3.
第九章 物件導向-進階.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
#include <iostream.h>
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
C++语言程序设计(第4版) 第七章 继承与派生 数学与统计科学学院 胡凤珠.
變數與資料型態  綠園.
資料!你家住哪裏? --談指標 綠園.
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
第十二章 C与C C转入C++时不需改变的内容 12.2 C转入C++的一些与类无关的 新特性
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计

基本知识 a C++语言程序设计

友元是可以访问类的私有成员和保护成员的外部成员 9.4 友元 友元是可以访问类的私有成员和保护成员的外部成员 在一个类中,可以利用关键字friend将外部成员(一般函数、其他类的成员函数或其他类)声明为本类的友元 类中本来隐藏的信息(私有和保护成员)可以被友元访问 友元提供了不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制 从封装的角度讲,友元是对数据隐藏的破坏 很多情况,考虑到数据共享的必要性,为了提高程序的效率,这种“小破坏”还是必要的 C++语言程序设计

9.4 友元 友元函数 友元类 C++语言程序设计 声明为友元的是一般函数或是另一个类的成员函数 是在类声明中由关键字friend修饰的非成员函数 一般函数 另一个类的成员函数 它不是本类的成员函数,但是在它的函数体中可以通过对象名访问本类的私有和保护成员 友元类 在类的声明中可以声明另一个类为本类的友元,这时称为友元类 是在类的声明中由关键字friend修饰的其他类 若A类是B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员 C++语言程序设计

9.4 友元 例:使用友元函数计算两点距离 C++语言程序设计 //使用友元函数计算两点距离 #include <iostream> #include <cmath> using namespace std; class Point //Point类定义 { public: //外部接口 Point(int xx=0, int yy=0) {X=xx;Y=yy;} int GetX() {return X;} int GetY() {return Y;} friend float fDist(Point &a, Point &b); //友元函数声明 private: //私有数据成员 int X,Y; }; C++语言程序设计

9.4 友元 C++语言程序设计 float fDist(Point &p1, Point &p2) //友元函数实现 { //double x=double(p1.GetX( )-p2.GetX( )); double x=double(p1.X-p2.X); //通过对象访问私有数据成员 //double x=double(p1.GetY( )-p2.GetY( )); double y=double(p1.Y-p2.Y); return float(sqrt(x*x+y*y)); } void main() //主函数 { Point myp1(1,1),myp2(4,5); //定义Point类的对象 cout<<"The distance is:"; cout<<fDist(myp1,myp2)<<endl; //计算两点间的距离 C++语言程序设计

例:教师可以修改学生的成绩,将教师类的成员函数assignGrade( )声明为学生类的友元函数 9.4 友元 例:教师可以修改学生的成绩,将教师类的成员函数assignGrade( )声明为学生类的友元函数 class Student //前向引用声明 class Teacher { public: //… void assignGrades(Student& s) { s.grade=4.0; } private: //…. }; class Student { public: //… //友元函数声明 friend void Teacher::assignGrades(Student& s) ; private: float grade; }; C++语言程序设计

9.4 友元 例:友元类的使用 C++语言程序设计 //友元类的使用 #include <iostream> #include<cstring> using namespace std; class Student; //前向引用声明,只声明类名,类定义在后面 class Teacher { public: Teacher(int i, char* c); void show(); void assignGrades(Student& s);//使用未定义的类,需要前向引用声明 private: char* name; int id; }; C++语言程序设计

9.4 友元 C++语言程序设计 Teacher::Teacher(int i, char* c) { id = i; name = new char[strlen(c)+1]; if (name != 0) strcpy(name, c); } void Teacher::show() cout<<"工作证号:"<<id<<" 姓名:"<<name<<endl; void Teacher::assignGrades(Student& s) if (s.pT->id == id) s.grade=4.0; //修改学生成绩,直接操作另一个类私有的成员 C++语言程序设计

9.4 友元 C++语言程序设计 class Student { public: Student(int i, char* c, float s, Teacher* t); void printstu(); friend class Teacher; //友元类的声明 private: Teacher* pT; int sid; char* name; float grade; }; C++语言程序设计

9.4 友元 C++语言程序设计 Student::Student(int i, char* c, float s, Teacher* t) { sid = i; name = new char[strlen(c)+1]; if (name != 0) strcpy(name, c); grade = s; pT=t; } void Student::printstu() cout<<"学号:"<<sid<<" 姓名:"<<name; cout<<" 成绩:"<<grade<<endl; C++语言程序设计

9.4 友元 C++语言程序设计 void main() { Teacher wang(62, "wang yi"); wang.show(); Student s1(10, "zhang san", 87.6, &wang); s1.printstu(); wang.assignGrades(s1); s1.printstu (); Student s2(12, "li si", 80, &wang); s2.printstu(); wang.assignGrades(s2); s2.printstu (); } C++语言程序设计

9.4 友元 关于友元类的说明 友元关系是不能传递的 友元关系是单向的 C++语言程序设计 B类是A类的友元,C类是B类的友元,C类和A类之间,如果没有声明,就没有任何友元关系,不能进行数据共享。 友元关系是单向的 如果声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有和保护数据 C++语言程序设计