派生类无法访问私有成员(eventhough构造函数在基类中定义)

时间:2016-05-14 18:22:43

标签: c++ inheritance

任何人都可以告诉我在下面的程序中我做错了什么? :

// 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()

2 个答案:

答案 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; 
 }