| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
雷速体育发帖软件开发QQ118000023C语言培训|一对一辅导|零基础学编程LightningChart 快速先进的.Net图表控件
共有 378 人关注过本帖
标题:两个不同的类要这样才能交流??
只看楼主 收藏
lemonandtree
Rank: 2
等 级:论坛游民
帖 子:74
专家分:10
注 册:2017-10-5
结帖率:88.89%
  问题点数:0  回复次数:11   
两个不同的类要这样才能交流??
两个不同的类要这样才能交流??
我想写一个程序:在计算学生的分数时记录下最高分的学生和他的指导老师,并且给指导老师加2000元奖金,同时计算出老师的总工资(含奖金)后输出最高工资的老师名字和工资。还要输出学生的学号和名字。
这是我的代码,我把学生和老师分成两个不同的类,但我不知道他们应该如何交流,老师的名字是个字符,我想把这个字符的地址传过去,可是没有用,麻烦那位帮我修改一下程序,谢谢了。
程序代码:
#include<iostream>
#include<iomanip>
using namespace std;
const int N=6;
int i;
struct stu
{
&nbsp;&nbsp;&nbsp; char name[10];
&nbsp;&nbsp;&nbsp; int wage ;
&nbsp;&nbsp;&nbsp; int floatingwages;
&nbsp;&nbsp;&nbsp; int bonus;
&nbsp;&nbsp;&nbsp; int totalwages;//定义结构体包含老师工资的各部分。
}p[6]={{"贾宇",2300,1980,2000},{"张莹",1908,2000,1000},{"李蒙",2490,1080,980},{"王同辽",980,1200,680},{"叶库伦",1290,1800,390},{"0",0,0,0}},a,n,*w=p;
class student
{
public:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; student(int n,float s);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void display();
private:
&nbsp;&nbsp;&nbsp; int num;
&nbsp;&nbsp;&nbsp; float score;
&nbsp;&nbsp;&nbsp; char teacher[20];
};//定义学生的类
class teacher
{
public:
&nbsp;&nbsp;&nbsp; teacher( stu n);
&nbsp;&nbsp;&nbsp; void all(struct stu *p);
&nbsp;&nbsp;&nbsp; void order(struct stu *p);
&nbsp;&nbsp;&nbsp; void output(struct stu *p);
private:
&nbsp;&nbsp;&nbsp; stu a;
};//定义老师的类
student::student(int n,float s)
{
&nbsp;&nbsp;&nbsp; num=n;
&nbsp;&nbsp;&nbsp; score=s;
}
void student::display()
{
&nbsp;&nbsp;&nbsp; cout<<num<<" "<<score<<endl;
}
teacher::teacher(stu n)
{
&nbsp;&nbsp;&nbsp; a=n;//工资初始化
}
void teacher::all( stu *p)
{
&nbsp;&nbsp;&nbsp; for(i=0;i<=5;i++)
&nbsp;&nbsp;&nbsp; p[i].totalwages=p[i].wage+p[i].floatingwages+p[i].bonus;//求总工资
}
void teacher::order( stu *p)
{
&nbsp;&nbsp;&nbsp; *(p+5)=*p;
&nbsp;&nbsp;&nbsp; for(i=1;i<5;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((p+i)->totalwages>(p+5)->totalwages)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(p+5)=*(p+i);//找出工资最多的老师
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
}
void teacher::output( stu *p)
{
&nbsp;&nbsp;&nbsp; cout<<p[5].name<<setw(5)<<p[5].totalwages<<endl;
}
void main()
{
&nbsp;&nbsp;&nbsp; teacher tea[N]={teacher(p[0]),teacher(p[1]),teacher(p[2]),teacher(p[3]),teacher(p[4]),teacher(p[5])};
&nbsp;&nbsp;&nbsp; teacher*q=tea;
&nbsp;&nbsp;&nbsp; for(i=0;i<N;q++,i++,w++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q->all(w);
&nbsp;&nbsp;&nbsp; w=p;
&nbsp;&nbsp;&nbsp; q=tea;//指针返回原点
&nbsp;&nbsp;&nbsp; q->order(w);
&nbsp;&nbsp;&nbsp; q->output(w);
&nbsp;&nbsp;&nbsp; student stud[5]={student(1,78.5),student(2,85.5),student(3,98.5),student(4,100),student(5,95.5)};
&nbsp;&nbsp;&nbsp; student*p=stud;
&nbsp;&nbsp;&nbsp; for(int i=0;i<5;p=p++,i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p->display();
}
2017-12-24 13:27
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
  得分:0 
地址??
&p[(0-5)].name

hl928452957@gmail点com

2017-12-25 12:44
lemonandtree
Rank: 2
等 级:论坛游民
帖 子:74
专家分:10
注 册:2017-10-5
  得分:0 
代码发成这样,我也不知道则么回事,我再发一遍
程序代码:
#include<iostream>
#include<iomanip>
using namespace std;
const int N=6;
int i;
struct stu
{
    char name[10];
    int wage ;
    int floatingwages;
    int bonus;
    int totalwages;//定义结构体包含老师工资的各部分。
}p[6]={{"贾宇",2300,1980,2000},{"张莹",1908,2000,1000},{"李蒙",2490,1080,980},{"王同辽",980,1200,680},{"叶库伦",1290,1800,390},{"0",0,0,0}},a,n,*w=p;
class student
{
public:
       student(int n,float s);
       void display();
       void A(char * ab);
private:
    int num;
    float score;
    char r[5][10];
};//定义学生的类
class teacher
{
public:
    teacher( stu n);
    void all(struct stu *p);
    void order(struct stu *p);
    void output(struct stu *p);
private:
    stu a;
};//定义老师的类
student::student(int n,float s)
{
    num=n;
    score=s;
}
void student::display()
{
    cout<<num<<" "<<score<<endl;
}
 void student::A(char * ab)
 {
       strcpy(r[10],ab);
 };
teacher::teacher(stu n)
{
    a=n;//工资初始化
}
void teacher::all( stu *p)
{
    for(i=0;i<=5;i++)
    p[i].totalwages=p[i].wage+p[i].floatingwages+p[i].bonus;//求总工资
}
void teacher::order( stu *p)
{
    *(p+5)=*p;
    for(i=1;i<5;i++)
        if((p+i)->totalwages>(p+5)->totalwages)
        {
            *(p+5)=*(p+i);//找出工资最多的老师
        }
}
void teacher::output( stu *p)
{
    cout<<p[5].name<<setw(5)<<p[5].totalwages<<endl;
}
void main()
{
    teacher tea[N]={teacher(p[0]),teacher(p[1]),teacher(p[2]),teacher(p[3]),teacher(p[4]),teacher(p[5])};
    teacher*q=tea;
    for(i=0;i<N;q++,i++,w++)
        q->all(w);
    w=p;
    q=tea;//指针返回原点
    q->order(w);
    printf("工资最高:");
    q->output(w);
    student stud[5]={student(1,78.5),student(2,85.5),student(3,98.5),student(4,100 ),student(5,95.5)};
    student*p=stud;
    for(int i=0;i<5;p=p++,i++)
        p->display();
}
我的想法是创建两个类。一个是老师,一个是学生,分别有5个对象,首先两个类互不相干,老师的类中计算出最高工资并且输出,学生的类中计算出最高分,但你会发现,我比较最高工资的时候,我没有用老师这个类中的数据,因为我不知道如何共享老师类中的5个对象的工资,我一次只能调用一个对象,所以无法用类中的数据去做比较,我试过用static去声明,但没有用,会报错。所以我想知道如何让一个类中的所有的对象的变量来共用呢?
2017-12-26 21:37
新人学习
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:118
专家分:166
注 册:2017-10-26
  得分:0 
今天刚看到这个地方 具体也不知道怎么用
好像是需要友元函数;
2017-12-26 23:11
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
  得分:0 
输出

程序代码:
工资最高:贾宇 6280
1 78.5
2 85.5
3 98.5
4 100
5 95.5

for(int i=0;i<5;p=p++,i++)
        p->display();


p=p++  分的清 p++ 与++p吗.
在这里直接++p 就可以了 还 p=p

hl928452957@gmail点com

2017-12-27 02:16
lemonandtree
Rank: 2
等 级:论坛游民
帖 子:74
专家分:10
注 册:2017-10-5
  得分:0 
p++是先使用在自增,++p是先自增在使用吧,感觉类好难啊,网上的资料都看不太懂,我们老师讲的感觉不够用。
2017-12-27 09:48
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
  得分:0 
回复 6楼 lemonandtree
你知道作用

那么  
假设  p=1;

第一次循环 p=p++ ; 1 = 1 返回真 ; 然后 p=2
第二次循环 p=p++ ; 2 = 2 返回真 ; 然后 p=3

懂了吗,要么你分开 , 要么 ++放到前面去

hl928452957@gmail点com

2017-12-28 09:17
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
  得分:0 
回复 6楼 lemonandtree
这个就是要自己大量尝试.
学慢点没什么问题.

教程给的例子不多 就自己写.,自己想. 然后百度

hl928452957@gmail点com

2017-12-28 09:18
lemonandtree
Rank: 2
等 级:论坛游民
帖 子:74
专家分:10
注 册:2017-10-5
  得分:0 
第一次循环 p=p++ ; 1 = 1 返回真 ; 然后 p=2
第二次循环 p=p++ ; 2 = 2 返回真 ; 然后 p=3

懂了吗,要么你分开 , 要么 ++放到前面去
请问这分开是什么意思?是在程序中实现分开吗?
2017-12-28 17:06
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
  得分:0 
回复 9楼 lemonandtree
别说那么多了.
你那句直接改成 ++p 或者p++     就可以了.




hl928452957@gmail点com

2017-12-29 09:26







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.059764 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved