c++综合实验报告友元

news/2024/10/9 12:29:37

综合性、设计性实验报告

专业:计算机科学与技术 

一、实验目的:

1.熟练掌握友元函数和友元类设计的方法

2.掌握友元函数的含义,友元函数和成员函数的区别。

3.掌握友元类的含义。

二、实验仪器或设备:微型计算机

三、总体设计(设计原理、设计方案及流程等)

实验内容:

定义Student类和Score类,输出一个学生的成绩单(包括学号、姓名、高等数学、英语成绩)。

【要求:】

方法1:非成员函数作为友元函数

方法2:成员函数作为友元函数

方法3:友元类

本实验运行环境:Microsoft Visual c++ 2010学习版,采用面向对象的程序设计方法。

四、实验步骤(包括主要步骤、代码分析等)

方法1://非成员函数作为友元函数
#include<iostream>
#include<cstring>
using namespace std;
class Score;
class Student
{ private:
int number;
char name[8];
public:
Student(int num,char na[8]);
friend void display(Student &x);

};

class Score
{
private:
double math;
double english;
public:
Score(double m,double e);
friend void display(Score &s);
};


Student::Student(int num,char na[])
{
number=num;
strcpy(name,na);
}
Score::Score(double m,double e)
{
math=m;
english=e;
}
void display(Student &x)
{
cout<<"该学生的信息 \n学号num: "<< x.number<<" 名字name: "<<x.name<<"\n";
}
void display(Score &s)
{

cout<<"该学生的高考成绩math: "<<s.math<<"分 英语成绩english: "<<s.english<<"分\n";
}
int main()
{
Student st1(123456,"小陈");
Score sc1(100,123);
display(st1) ;
display(sc1) ;
return 0;
}

方法2://成员函数作为友元函数

#include<iostream>

#include<cstring>

using namespace std;

class Score;

class Student

{

private:

int number;

char name[8];

public:

Student(int num,char na[8]);

void display(Score &s);

};

class Score

{

private:

double math;

double english;

public:

Score(double m,double e);

friend void Student::display(Score &s);

};

Student::Student(int num,char na[])

{

number=num;

strcpy(name,na);

}

Score::Score(double m,double e)

{

math=m;

english=e;

}

void Student::display(Score &s)

{

cout<<"该学生的信息 \n学号num: "<<number<<" 名字name: "<<name<<"\n";

cout<<"该学生的高考成绩math: "<<s.math<<"分 英语成绩english: "<<s.english<<"分\n";

}

int main()

{

Student st1(123456,"小陈");

Score sc1(100,123);

st1.display(sc1) ;

return 0;

}

方法3://友元类

#include<iostream>

#include<cstring>

using namespace std;

class Score;

class Student {

private:

int number;

char name[8];

public:

Student(int num,char na[8]);

void display(Score &s);

};

class Score {

private:

double math;

double english;

public:

Score(double m,double e);

friend Student;

};

Student::Student(int num,char na[]) {

number=num;

strcpy(name,na);

}

Score::Score(double m,double e) {

math=m;

english=e;

}

void Student::display(Score &s) {

cout<<"该学生的信息 \n学号num: "<<number<<" 名字name: "<<name<<"\n";

cout<<"该学生的高考成绩math: "<<s.math<<"分 英语成绩english: "<<s.english<<"分\n";

}

int main() {

Student st1(12345116,"小中");

Score sc1(107,123);

st1.display(sc1) ;

return 0;

}

五、结果分析与总结

方法1:

方法2:

方法3:

(运行结果截图,简短的体会总结)

简短的体会总结:非成员函数作为友元函数适用于封装与类相关但不属于类的逻辑;成员函数作为友元函数适用于在不同类之间实现紧密耦合和协作;而友元类则适用于需要深度交互和合作的两个类之间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/27941.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

分层架构上的探索实践

简介 因为身处在应对ToB需求的SAAS行业,复杂的需求在代码上造成的混乱始终是我们的一大困扰,所以我们在一些项目中尝采用整洁架构的分层模式对部分代码做了一些改善和实践。 在这篇文章中我来分享一下我在分层架构上的思考,一些实践方法。 为什么要分层? 我们都知道ToB行业…

社区版pycharm下载安装教程

参考:韩顺平——下载 在浏览器输入 www.jetbrains.com/进入pycharm官网 指向Developer Tools,点击Pycharm 点击Download 为了更好得跟踪韩老师的教程,我这里选择下载与韩老师一致的版本(对版本无要求的话直接点击download)找到2023.2.2的版本,在PyCharm Community Editio…

嵌入式笔记4.2 USART

目录一、USART 简介二、USART 寄存器详解寄存器基础信息寄存器地址寄存器名称与作用USART 寄存器组简表寄存器详解1. 控制寄存器 1(USART_CR1)2. 控制寄存器 2(USART_CR2)3. 控制寄存器 3(USART_CR3)4. 波特率寄存器(USART_BRR)5. 保护时间和预分频器寄存器(USART_GTP…

嵌入式笔记4.3 异常和中断详解

目录一、异常和中断的简介1. 外设中断处理流程2. 中断处理与异常处理3. 支持的异常和中断数量二、异常类型三、中断管理简介四、优先级定义五、向量表和向量表重定位六、中断输入和挂起行为七、异常流程简介1. 接受异常请求2. 异常进人流程3. 执行异常处理4. 异常返回八、中断控…

HTUCTF2024 河南师范大学招新赛

CRYPTO easyMath 题目 中国古代有很多人同名譬如同样叫孙子,有的人会兵法,有的人会数学你能帮我求解出这道题的答案吗?请开启容器后下载对应输出文件难度:简单 from secret import flag from Crypto.Util.number import *def s2n(string):return int(string.encode("u…

2024 年 5 月 1 日 周三 小雨 冷(384 字)

正文祖父见到我和见长,第一句话是好久都没看到我们的孙子了。然后第二句话直接把我们俩都干懵了。“你们有没有阿托品啊?”我第一反应是懵,第二反应是想笑。上哪儿给你找这种处方药去…… 这种 M 受体阻断剂管得还严,严重有机磷中毒的时候,一掰就是几十支。而且这药不是最…

【初中英语提分神器】中考高频词汇大全001-A开头单词高频,轻松掌握,考试无忧!速来围观!

PDF格式公众号回复关键字:ZKGCH001副词 1 already 已经 She has already finished her homework. (她已经完成了她的作业。) 2 also 也,同样地,而且 They went to the movies, and I also went. (他们去看了电影,我也去了。) 3 almost 几乎,差不多 Ive almost finished…

Python编程——ModuleNotFoundError: No module named learning logs

Python编程:从入门到实践(2)第18章-从Django入手 执行命令 python manage.py makemigrations learning_logs 时报错,如图: 问题原因:learning_logs 错写成 learning logs正确代码如下:INSTALLED_APPS = [# 我的应用程序learning_logs,# 默认添加的应用程序django.contr…