一、一个类的成员函数有三个互不相干作用
1.可以通过类的成员方法,访问它的私有数据。
2.该函数的作用域在类中。
3.在外部调动该函数必须通过成员访问符访问,也就是必须经由一个对象去激活(有一个this指针)。
二、友元函数
1.友元函数作用域不属于类的作用域,不是类的成员,也就不是类的方法,不受公有、私有、保护限制。
2.友元函数可以在类中实现,也可以在类外实现(一般是在类的外部实现)。
3,声明成友元函数,可以通过友元函数实现对类的私有数据进项访问。(但是他没有this指针)
4.一般友元函数声明在类的最前面
5.友元函数是为另外一个类的成员方法,则其作用域为另外一个类的作用域。
6.友元类,在一个类中声明为友元类,则该友元类都可以访问他的私有数据
在类的外部实现,也可以在内部实现
三、输出运算符<<、输入运算符>>的重载
我们平时可以用流 std::cout<<str<<n ; std::cin>>str>>n ; 输出、输入字符串和整型等内置类型的值。但是对于我们自定义的类,比如 Student 类,却不能直接通过 cout<<Student 或 cin>>Student 这样的形式来输出类的内容或给类赋值。怎么办呢?我们可以通过重载输出、输入运算符,让自定义的类也支持这样的操作。
1.在引入iostream头文件,标准的命名空间的后,ostream 输出流(类),其中cout是它的一个对象, istream输入流对象,cin是它的一个对象。
2.输入输出流对象一般只是对内置类型进行输出,对对象的输出要进行运算符的重载
3.输入、输出运算符的重载,一般通过友元函数,进行实现,友元函数可以访问一个类的私有数据,通过友元函数可以实现对类的输出;
在类中声明成友元函数才能访问私有数据
这样的话调动cout<<c<<endl;就可以对对象进行输出
4.输入输出运算符的重载也可以是类的成员方法,在类的内部实现,只不过输出格式比较诡异通过类的对象调动cout对象 c<<cout;