钱能C++语言读书笔记(八)友元

    技术2022-05-20  51

    钱能C++语言读书笔记(八)友元

     

    a)         友元函数

    如果将数据成员设置为公有,那势必造成形形色色的使用者在使用过程中的不安全隐患。这时候,将一个普通函数声明为类的友元,就可以访问类的私有数据。

    b)        友元成员函数

    一个类的成员函数可以是另一个类的友元,例如教师应该可以修改学生的成绩,可以访问学生类的私有数据,故将教师类中的成绩assignGrade成员函数声明为学生类的友元。

    c)        友元类

    整个类也可以是友元,此时称该友元为友类。友类,友类中的每一个成员函数都可以访问另一个类中的私有成员。例如,将整个教师类看作是学生类的友类,教师即可修改成绩,又可调整学时数。

    Demo代码如下:

    /* FileName: friendFunctionAndClass.cpp Author: ACb0y Create Time: 2011年2月25日22:30:37 Last modify Time: 2011年2月25日22:37:21 */ #include <iostream> #include <string> #include <vector> using namespace std; class Student; class Teacher { private: vector<Student> sList; public: void assignGrade(Student & s, double grade); void print(); }; class Student { private: string name; int semesterHours; double grade; public: Student(string name); friend void Teacher::assignGrade(Student &s, double grade); friend void Teacher::print(); }; Student::Student(string name) { this->name = name; } void Teacher::assignGrade(Student & s, double grade) { s.grade = grade; sList.push_back(s); } void Teacher::print() { int size = sList.size(); cout << "All student grades" << endl; for (int i = 0; i < size; ++i) { cout << sList[i].name << " " << sList[i].grade << endl; } } int main() { Student a("Janny"); Student b("Lucy"); Student c("Kenn"); Teacher teacher; teacher.assignGrade(a, 89); teacher.assignGrade(b, 60); teacher.assignGrade(c, 78); teacher.print(); return 0; }  

    运行结果:

     

     


    最新回复(0)