第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例第七讲 类与对象
6.4 友员 (friend)
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例什么要定义友员? 类中的私有数据不能被外部任意访问修改,只能由类本身的函数访问修改,
友员 ( friend )
友员的作用? 被定义为友员的类或函数可以访问修改类的私有数据,
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例友员的定义形式? 在类内定义,
友员类,friend class 友员类名 ;
友员成员函数,
friend 返回值类型 类名,:函数名 ;
友员函数,
friend 函数原型声明 ;
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例友员类定义形式? 将一类声明为另一类的友员,
例 1,先定义两个类“学生” st_n 和“成绩”
sco,再将 sco 定义为 st_n 的友员,
注意,我们将两个类放在一个文件内,而不是通常的多个文件,主要是避免篇幅太长。
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
#include <iostream.h>
#include <string.h>
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; //学生姓名、学号。
第 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; //学生数学、英语成绩。
第 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,且相互不能访问私有数据,把一个有联系类分成了两个。
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
#include <iostream.h>
#include <string.h>
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的区别第 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; }
第 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能 访问私有数据,建立了类之间的联系。
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 1 有关内容总结
1,定义了类 sco 是类 st_n 的友员,建立了类之间的联系。使编程显得更便利。
2,友员可以访问并修改类的私有和保护数据,调用类的私有和保护函数,使类不至于由于封装而增加了编程的复杂性。
总的目标:使外部类能访问修改类的私有或保护数据、能调用类的私有或保护函数。
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例友员成员函数什么是友员成员函数? 将一个类的成员函数(不是类全部)声明为一个类的友员,使这个函数能访问类的私有和保护成员。
声明形式?
friend 返回类型 类名,:函数名例如,friend void sco::show( );
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
#include <iostream.h>
#include <string.h>
class st_n; //仅为 原型定义,具体实现在后面
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); //由于还没有具体定
//义,所以函数 show 的实现在后面,
例 2,友员成员函数第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
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); }
friend void sco::show(st_n &); //定义友员
char *name,*num; //学生姓名、学号。
void sco::show( st_n &st) {
cout << "\n name:" << st.name
<< "\n num," << st.num;
show( ); }
第 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); //打印姓名、学号、成绩
}
结果,name,Wang
num,12345
mathematics:72
english,82
注意,定义了两个类 a,b,且 b的成员函数
show 能访问私有数据,建立了类与类成员函数之间的联系。
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 2 有关内容总结
1,定义了类 sco 中的函数 show 是类 st_n
的友员,建立了类和类成员函数之间的联系。使编程显得更便利。
2,友员成员函数可以访问并修改类的私有或保护数据,调用类的私有或保护函数使类不至于由于封装而增加了编程的复杂性。
总的目标:使外部类的成员函数能访问修改类的私有或保护数据、能调用类的私有或保护函数。与友员类的区别是仅将部分成员函数声明为友员,而不是整个类,
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例友员函数什么是友员函数? 将一个外部函数(不是类全部,也不是部分成员函数)声明为一个类的友员,使这个函数能访问类的私有和保护成员。
声明形式?
friend 返回类型 函数名 (形参 );
例如,friend void show(st_n &st);
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
#include <iostream.h>
#include <string.h>
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); }
char *name,*num; //学生姓名、学号。
friend void show( st_n &st) {
cout << "\n name:" << st.name
<< "\n num," << st.num; }
例 3,友员函数 (或称友员全程函数 )
第 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_all(st_n &st,sco *p ) {
show(st);
cout << "\n mathematics:" << p->mat
<< "\n english," << p->eng; }
int mat,eng; //学生数学、英语成绩。
friend void show_all(st_n &,sco *);
第 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_all(a,&b); //打印姓名、学号
//数学、英语成绩
}
结果,name,Wang
num,12345
mathematics:72
english,82
注意,定义了两个类 a,b,且 外部友员函数
show_all 能访问私有数据,建立了类与外部函数之间的联系。
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例几点注意
1,友员关系不能传递,即你是我的朋友,他是你的朋友,但不一定他是我的朋友,从另一个角度说,我愿意和你分享我的秘密,但不一定愿意和你的朋友分享我的秘密,
2,友员关系不是可逆的,即,甲是乙的友员,
并不意味着乙是甲的友员,从另一个角度说,我愿意和你分享我的秘密,但不一定你愿意和我分享你的秘密第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例课 堂 总 结
1 友员有三种形式,友员类,友员成员函数 和友员函数 。
2 友员可以访问并修改类的 私有 或 保护 数据,
调用类的 私有 或 保护 成员函数,使类既具有封装性,又具有灵活性。
3 友员关系不能传递,不是互逆的。
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例作 业一,填空
1,一个非成员函数必须声明为类的,
才能访问类的私有数据,
2,类的友员可以访问类的 和 成员,
3,一个无返回值的友员函数可声明为,
add(int,char*);
二,友员函数的作用是什么? 说明友员类、
友员成员函数和友员函数的区别。
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例三,改错并说明理由,
include <iostream.h>;
void class example ( )
{
private
friend show( ):
int date=( )
public;
void eample { int y= 10} ( date=y);
int print { }
( cout >> ‘date=‘ >> date; )
}