任何人都可以告诉我在下面的程序中我做错了什么? :
// C++-Assignment2.cpp
#include <iostream.h>
#include <conio.h>
class fahrenheit
{
private:
int fah;
public:
fahrenheit()
{
fah=0;
}
void fget();
void fdisp();
};
class celsius: public fahrenheit
{
private:
int cel;
public:
void calc();
void cdisp();
};
void fahrenheit::fget()
{
cout<<"\n Enter temperature value in Fahrenheits:";
cin>>fah;
}
void fahrenheit::fdisp()
{
cout<<"\n Temperature in Fahrenheits: "<<fah;
}
void celsius::calc()
{
cel=5*(fah-32)/9;
}
void celsius::cdisp()
{
cout<<"\n Temperature in Celsius:"<<cel;
}
void main()
{
clrscr();
celsius c1;
c1.fget();
c1.fdisp();
c1.calc();
c1.cdisp();
getch();
}
如果之前有人问我很抱歉,但我找不到用户提到他们包含构造函数的问题(就像我做的那样)。 另外,我确实理解这个程序并没有那么多意义(考虑我如何构建这两个单位等)。还是一个初学者,所以现在还不是真正的“完善”语义。
错误:
Compiling 2-ASSIGN.CPP:
Error 2-ASSIGN.CPP 36: 'fahrenheit::fah' is not accessible in function celsius::calc()
Error 2-ASSIGN.CPP 36: 'fahrenheit::fah' is not accessible in function celsius::calc()
答案 0 :(得分:1)
在这个成员函数中
void celsius::calc()
{
cel=5*(fah-32)/9;
}
您正在尝试访问基类的私有数据成员fah
。
您可以将其声明为具有受保护的访问控制。例如
class fahrenheit
{
protected:
int fah;
//...
};
或者您可以定义一个返回此数据成员值的公共成员函数。
至于我,那么这个类层次结构没有意义。:)
答案 1 :(得分:0)
void celsius::calc()
{
cel=5*(fah-32)/9;
}
您尝试访问私有的fah
。派生类无法访问私有成员。
在良好的设计中,您将在基类中使用公共getter方法,您可以使用该方法在派生类中获取fah
的值。
像
这样的东西int farenhiet::get_fah()
{
return fah;
}
然后在派生类
中void celsius::calc()
{
cel=5*(get_fah()-32)/9;
}