面向对象程序设计 第七讲类与对象 6.4支员( friend 堂提要 第6章类与对象 61类定义与对象声明 62对象的使用 63对象成员 6.4友员 friend 6.5静态成员和对象组 织 6.6模板 6.7应用举例
第 6章 类与对象 6.1 类定义与对象声明 6.2 对象的使用 6.3 对象成员 6.4 友员 friend 6.5 静态成员和对象组 织 6.6 模板 6.7 应用举例 第七讲 类与对象 6.4 友员 (friend)
面向对象程序设计 友员( friend) 什么要定义友员类中的私有数据不能堂投要 被外部任意访问修改,只能 由类本身的函数访问修改 第6章类与对象 61类定义与对象声明 62对象的使用 63对象成员 友员的作用 被定义为友员的类或函数64友员nd 6.5静态成员和对象组 可以访问修改类的私有数据 织 6.6模板 6.7应用举例
第 6章 类与对象 6.1 类定义与对象声明 6.2 对象的使用 6.3 对象成员 6.4 友员 friend 6.5 静态成员和对象组 织 6.6 模板 6.7 应用举例 什么要定义友员 类中的私有数据不能 被外部任意访问修改, 只能 由类本身的函数访问修改. 友员 ( friend ) 友员的作用 被定义为友员的类或函数 可以访问修改类的私有数据
面向对象程序设计 友员的定义形式在类内定义 友员类: friend class友员类名 堂提要 友员成员函数 第6章类与对象 friend返回值类型类名:函数名; 61类定义与对象声明 62对象的使用 友员函数 63对象成员 friend函数原型声明 6.4友员 friend 6.5静态成员和对象组 织 6.6模板 6.7应用举例
第 6章 类与对象 6.1 类定义与对象声明 6.2 对象的使用 6.3 对象成员 6.4 友员 friend 6.5 静态成员和对象组 织 6.6 模板 6.7 应用举例 友员的定义形式 在类内定义: 友员类: friend class 友员类名; 友员成员函数: friend 返回值类型 类名::函数名; 友员函数: friend 函数原型声明;
面向对象程序设计 友员类 定义形式将一类声明为另一类的友员 堂提要 例1.先定义两个类“学生”stn和“成绩” sco,再将sco定义为stn的友员 第6章类与对象 61类定义与对象声明 注意:我们将两个类放在一个文件内,而162对象的使用 不是通常的多个文件,主要是避免63对象成员 篇幅太长。 6.4友员 friend 6.5静态成员和对象组 织 6.6模板 6.7应用举例
第 6章 类与对象 6.1 类定义与对象声明 6.2 对象的使用 6.3 对象成员 6.4 友员 friend 6.5 静态成员和对象组 织 6.6 模板 6.7 应用举例 友员类 定义形式 将一类声明为另一类的友员. 例1. 先定义两个类“学生” st_n 和“成绩” sco, 再将 sco 定义为 st_n 的友员. 注意:我们将两个类放在一个文件内,而 不是通常的多个文件,主要是避免 篇幅太长
面向对象程序设计 #include #include <string class st n char*name,*num;∥学生姓名、学号。 public: 堂提要 st n(char *nl, char n2)i name=new char[strlen(n1)+1] 第6章类与对象 num -new char strlen(n2)+ll 61类定义与对象声明 strcpy(name, nl) 62对象的使用 strcpy(nu, n2);) 63对象成员 void dspo) 6.4友员 friend cout <<n name name 6.5静态成员和对象组 K"n num: < num;) 织 6.6模板 6.7应用举例
第 6章 类与对象 6.1 类定义与对象声明 6.2 对象的使用 6.3 对象成员 6.4 友员 friend 6.5 静态成员和对象组 织 6.6 模板 6.7 应用举例 #include #include class st_n { public: }; st_n(char *n1, char *n2) { name=new char[strlen(n1)+1]; num =new char[strlen(n2)+1]; strcpy(name, n1); strcpy(num, n2); } void dsp( ) { cout << "\n name:" << name << "\n num: " << num; } char *name, *num; //学生姓名、学号
面向对象程序设计 class sco Int mat,eng,∥学生数学、英语成绩 public: 堂提要 sco(int il, int 12): mat(il),eng(12)i) 第6章类与对象 void show)i 61类定义与对象声明 cout <<" n mathematics. I mat 62对象的使用 n english: " < eng, 63对象成员 6.4友员 friend 6.5静态成员和对象组 织 6.6模板 6.7应用举例
第 6章 类与对象 6.1 类定义与对象声明 6.2 对象的使用 6.3 对象成员 6.4 友员 friend 6.5 静态成员和对象组 织 6.6 模板 6.7 应用举例 class sco { public: }; sco(int i1, int i2) :mat(i1),eng(i2) { } void show( ) { cout << "\n mathematics:" << mat << "\n english: " << eng; } int mat, eng; //学生数学、英语成绩
面向对象程序设计 void main( stna(" Wang","123456″);/创建对象 scob(72,82) ∥)创建对象 adsp(),∥打印姓名、学号 b.show();/打印数学、英语成绩 堂提要 第6章类与对象 结果:name:Wang 61类定义与对象声明 num:12345 62对象的使用 mathematics. 72 63对象成员 english: 82 6.4友员 friend 6.5静态成员和对象组 织 问题定义了两个类ab,且相互不能访间6被板 私有数据,把一个有联系类分成了两个。67应用举例
第 6章 类与对象 6.1 类定义与对象声明 6.2 对象的使用 6.3 对象成员 6.4 友员 friend 6.5 静态成员和对象组 织 6.6 模板 6.7 应用举例 void main( ) { st_n a( "Wang ", " 123456 "); //创建对象 sco b(72, 82); //创建对象 a.dsp( ); //打印姓名、学号 b.show( ); //打印数学、英语成绩 } 结果: name: Wang num: 12345 mathematics:72 english: 82 问题:定义了两个类 a,b,且相互不能访问 私有数据,把一个有联系类分成了两个
面向对象程序设计 ∥应用友员重新定义类stn和sco ∥注意与前面类stn和sco的区别 #include #include class st n i 堂提要 friend class sco;∥定义友员类 第6章类与对象 char*name,*num;∥学生姓名、学号。 public: 61类定义与对象声明 st n(char *nl, char * n2) 62对象的使用 name=new char strlen(n1)+ll 63对象成员 6.4友员 friend num-=new char[strlen(n2)+1] 6.5静态成员和对象组 strcpy(name, nl) 织 strcpy(mm,m2;}∥没有函数dsp()6模板 6.7应用举例
第 6章 类与对象 6.1 类定义与对象声明 6.2 对象的使用 6.3 对象成员 6.4 友员 friend 6.5 静态成员和对象组 织 6.6 模板 6.7 应用举例 #include #include class st_n { public: }; st_n(char *n1, char *n2) { name=new char[strlen(n1)+1]; num =new char[strlen(n2)+1]; strcpy(name, n1); strcpy(num, n2); } //没有函数dsp( ) friend class sco; //定义友员类 char *name, *num; //学生姓名、学号。 //应用友员重新定义类 st_n 和 sco //注意与前面类st_n 和sco的区别
面向对象程序设计 class sco Int mat,eng,∥学生数学、英语成绩 public: 堂提要 sco(int il, int 12): mat(il),eng(12)() 第6章类与对象 void show()i 61类定义与对象声明 cout <<" n mathematics. I mat 62对象的使用 An english: <<eng,) 63对象成员 void show( st n &st 6.4友员 friend cout n name st. name 6.5静态成员和对象组 n num st num;) 织 6.6模板 6.7应用举例
第 6章 类与对象 6.1 类定义与对象声明 6.2 对象的使用 6.3 对象成员 6.4 友员 friend 6.5 静态成员和对象组 织 6.6 模板 6.7 应用举例 class sco { public: }; sco(int i1, int i2) :mat(i1),eng(i2) { } void show( ) { cout << "\n mathematics:" << mat << "\n english: " << eng; } int mat, eng; //学生数学、英语成绩。 void show( st_n &st) { cout << "\n name:" << st.name << "\n num: " << st.num; }
面向对象程序设计 void ma stna(" Wang","123456");∥创建对象 scob(72,82) ∥)创建对象 b show(a),∥印姓名、学号 b show(),∥打印数学、英语成绩 堂提要 第6章类与对象 结果:name:Wang 61类定义与对象声明 num:12345 62对象的使用 mathematics. 72 63对象成员 english: 82 6.4友员 friend 6.5静态成员和对象组 织 注意:定义了两个类ab,但b能访间私有66模权 数据,建立了类之间的联系。 6.7应用举例
第 6章 类与对象 6.1 类定义与对象声明 6.2 对象的使用 6.3 对象成员 6.4 友员 friend 6.5 静态成员和对象组 织 6.6 模板 6.7 应用举例 void main( ) { st_n a("Wang ", "123456 "); //创建对象 sco b(72, 82); //创建对象 b.show(a); //打印姓名、学号 b.show( ); //打印数学、英语成绩 } 结果: name: Wang num: 12345 mathematics:72 english: 82 注意:定义了两个类 a,b,但b能访问私有 数据,建立了类之间的联系