我正在尝试使用类,我编写了这个示例代码。用户输入他们的注册号和两个标记。输出应该是它们的寄存器号和两个输入标记的平均值。我有两个问题:
如果我使用构造函数,如何使用float
类型以小数形式显示输出平均标记?
为什么寄存器号的输出不正确?代码如下。
#include<iostream.h>
#include<conio.h>
class abc
{
int reg, mark1, mark2;
public:
int avg;
abc(int reg, int mark1, int mark2)
{
avg = (mark1 + mark2) / 2;
}
void display()
{
cout<<"Your average mark is:\n"<<avg<<"\n";
cout<<"Your Register Number is:\n"<<reg<<"\n";
}
};
void main()
{
clrscr();
int num, m1, m2;
cout << "Enter your register number\n";
cin >> num;
cout << "Enter your Mark 1 and Mark 2:\n";
cin >> m1 >> m2;
abc s1(num,m1,m2);
s1.display();
getch();
}
我得到了平均值(没有小数),寄存器号输出为11196
。
答案 0 :(得分:1)
在C ++中,构造函数参数不会自动存储在类成员中。我会将您的类声明更改为以下内容,请注意我为成员和函数参数使用了不同的名称(我喜欢将class abc
{
int m_reg, m_mark1, m_mark2;
public:
int avg;
abc (int reg, int mark1, int mark2)
: m_reg(reg), m_mark1(mark1), m_mark2(mark2)
{
avg = (m_mark1+m_mark2)/2;
}
void display()
{
cout<<"Your average mark is:\n"<<avg<<"\n";
cout<<"Your Register Number is:\n"<<m_reg<<"\n";
}
};
用于私有成员变量)。
// The new declaration
double avg;
// In your constructor
avg = (double) (m_mark1 + m_mark2) / 2.0;
如果您希望结果为小数(而不是舍入或者是最接近的整数),则需要将平均声明和计算更改为:
(?<= )&&(?= )
答案 1 :(得分:0)
您需要做的就是在类构造函数中为 reg 属性添加值:
abc (int r, int mark1, int mark2)
{
reg = r;
avg = (mark1+mark2)/2;
}
除此之外,为什么avg是整数而不是double?考虑一下:
class abc
{
int reg,mark1,mark2;
public:
double avg;
abc (int r, int mark1, int mark2)
{
reg = r;
avg = (double)(mark1+mark2)/2.00;
}
void display()
{
cout<<"Your average mark is:\n"<<(int)avg<<"\n";
cout<<"Your Register Number is:\n"<<reg<<"\n";
}
};
如果你希望4.4显示为4,而4.5为5则使用此hack:
avg = avg + 0.5;
cout << (int)avg << "\n";