头文件 student.h
#ifndef Student_H
#define Sudent_H
class Sudent {
// 友元函数
friend void test(Student *);
// 友元类 通过友源类访问私有变量
friend class Teacher;
int i;
public: // 相同的作用域的方法放在一起
Student(int i, int j); // 构造方法
~Sudent(); // 析构方法,系统调用
void setJ(int j);
// 常量函数, 函数内的代码,不能修改类中的成员
void setk(int k) const;
private:
int j;
protect:
int k;
}
// 内部类
class Teacher {
public :
void call(Student* s) {
s->j = 111; // 无法直接访问私有变量,需要声明为 友元类
}
}
#endif
Student.cpp
#include "Student.h"
#include<iosstream>
using namespace std;
// 实现构造方法
Student::Student(int i, int j) :i(i) { // 构造方法特殊形式,把i复制给i 等于 this->i = i;
this->i = i;
count<<"构造方法"<<endl;
malloc
}
void Student::void setJ(int j) {
this->j = j;
}
Student::~Student() {
cout<<"析构方法"<<endl;
}
// main 函数
#include<iosstream>
using namespace std;
void test(Student* stu) {
// sut->j = 100; // 无法直接修改private属性, 需要声明友元函数,通过友元函数,外部类可以访问类的私有变量
// 友元函数 friend 在 Student中声明
}
int main() {
Student student;
test(); // 通过友元函数 对 private 属性赋值
count<<"Hello world! \n"
}