C ++访问虚方法中的公共变量

时间:2012-09-30 13:39:02

标签: c++ class virtual abstract-class

在c ++中我有一个抽象类A:

 class A
 {
 public:
    A(){}
    virtual ~A(){}
    virtual void out(std::ofstream& outFile) = 0;
    virtual void in(std::ifstream& inFile) = 0;
};    

我希望使用虚拟方法的B类:

class B : public A
{
public:
   B();              
   double angle;
   int index;


   virtual void out(std::ofstream& outFile);
   virtual void in(std::ifstream& inFile);

};

现在这里有一个问题:我想在虚拟方法中使用类似(int index)的B类变量:

virtual void out(std::ofstrea& outFile)
{
    outFile<< index << angle;       
}

这里我得到编译器错误,即在此范围内未声明角度和索引。这有点合乎逻辑,因为这些变量没有在A类中声明。 现在我如何在虚拟方法中访问变量角度和索引?

感谢您的帮助。

5 个答案:

答案 0 :(得分:1)

在定义你的函数时,你想要使用这样的东西:

void B::out(std::ofstream& outFile)
{
    outFile<< index << angle;       
}

无论函数是否为虚函数,都可以在成员函数中访问相应类的任何成员。

自从谈论读取或写入数据的函数时:除非您确实需要使用std::ofstreamstd::ifstream的具体细节,例如,使用open(),否则您应该通过{{ 1}}或std::ostream引用。这样,函数也可以与不同的流流类型一起使用,例如std::istreamstd::ostringstream

答案 1 :(得分:1)

如果您在课外实施该方法,则不要将其标记为virtual并且您的名称有资格:

void B::out(std::ofstrea& outFile)
{
    outFile<< index << angle;       
}

答案 2 :(得分:0)

除非您在类声明中编写了函数体,否则必须在成员函数名前加上类名:

void B::out(std::ofstream& out)
{
   out << index << angle;
}

顺便说一句,你得到了什么确切的错误,如果你能发布确切的错误代码,这会更简单。

答案 3 :(得分:0)

您在成员函数定义之前缺少类名。

void B::out(std::ofstrea& outFile)  // Virtual keyword is optional in defintion.
{
    // ...
}

答案 4 :(得分:0)

在cpp文件中定义类方法时,必须将类名称作为范围,如下所示:

void B::out(std::ofstrea& outFile)
{
outFile<< index << angle;       
}