C++编程实例-友元

本文详细介绍了C++中友元函数和友元类的概念及其应用。通过具体实例,展示了如何利用Teacher类作为Student类的友元,实现对学生类对象私有数据的访问和修改,加深了对友元特性的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验10 友元

【实验目的】

通过本实验,掌握友元的概念。

【实验要求】

熟练掌握友元函数的使用方式。

【实验内容】

模拟教师类的对象修改学生类对象的具体数据。

1)类Teacher中的函数s_g(Student &s)是类Student的友元函数。

#include<iostream>

using namespace std;

class Student;

class Teacher{

private:

    int i,*pts;

    char *name;

public:

    Teacher(char *p){ name=p; }

    ~Teacher(){}

    void s_g(Student &s);

};

class Student{

private:

    int i,n,x,*ps,*p;

public:

    Student(){ ps=new int[100]; n=0; p=ps; }

    ~Student(){ delete []ps; }

    void input();

    void display();

    friend void Teacher::s_g(Student &s);

};

void Teacher::s_g(Student &s){

    cout<<"Teacher "<<name<<" modify student grade!"<<endl;

    pts=s.ps;

    for(i=0;i<s.n;i++){

        if(*pts<60) *pts+=10;

        pts++;

    }

}

void Student::input(){

    cout<<"Please input student grade"<<endl;

    cout<<"No."<<n+1<<" grade="; cin>>x;

    while(x!=-1){

          *(p+n++)=x;

          cout<<"No."<<n+1<<" grade="; cin>>x;

    }

}

void Student::display(){

    cout<<"Student grade"<<endl;

    for(i=0;i<n;i++){

        cout<<"No."<<i+1;

        cout.width(5);

        cout<<*(ps+i)<<endl;

    }

}

int main(){

    Student s;

    Teacher t("Zhang");

    s.input(); s.display();

    t.s_g(s);  s.display();

    return 0;

}

2)类Teacher中是类Student的友类。

#include<iostream>

using namespace std;

class Student;

class Teacher{

private:

    int i,*pts;

    char *name;

public:

    Teacher(char *p){ name=p; }

    ~Teacher(){}

    void s_g(Student &s);

    void s_display(Student &s);

};

class Student{

private:

      int i,n,x,*ps,*p;

public:

    Student():n(0){ ps=new int[100]; p=ps; }

    ~Student(){ delete []ps; }

    void input();

    void display();

    friend class Teacher;

};

void Teacher::s_g(Student &s){

    cout<<"Teacher "<<name<<" modify student grade!"<<endl;

    pts=s.ps;

    for(i=0;i<s.n;i++){

        if(*pts<60) *pts+=10;

        pts++;

    }

}

void Teacher::s_display(Student &s){

    cout<<"Student grade"<<endl;

    pts=s.ps;

    for(i=0;i<s.n;i++){

        cout<<"No."<<i+1;

        cout.width(3);

        cout<<*pts<<endl;

        pts++;

    }

}

void Student::input(){

    cout<<"Please input student grade"<<endl;

    cout<<"No."<<n+1<<" grade="; cin>>x;

    while(x!=-1){

          *(p+n++)=x;

          cout<<"No."<<n+1<<" grade="; cin>>x;

    }

}

void Student::display(){

    cout<<"Student grade"<<endl;

    for(i=0;i<n;i++){

        cout<<"No."<<i+1;

        cout.width(5);

        cout<<*(ps+i)<<endl;

    }

}

int main(){

    Student s;

    Teacher t("Zhang");

    s.input(); s.display();

    t.s_g(s);  t.s_display(s);

    return 0;

}

转载于:https://my.oschina.net/u/141969/blog/609461

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值