涉及转换功能的棘手情况?

时间:2012-04-15 18:15:24

标签: c++ class object data-conversion

我遇到过这种情况,我觉得很棘手。我有2个类:time12和time24,分别维持12小时和24小时的时间。它们都应该具有单独的转换函数来处理到另一种类型的转换。但是如果我先声明时间12,那么转换函数原型中的“time24”将是未定义的,因为稍后将声明time24类。那我现在该怎么办?我甚至不能在里面声明它并在第二节之后定义它。那么现在呢?

class time12
{
 operator time24()  //time24 is undefined at this stage
 {

 }
};

class time24
{

};

3 个答案:

答案 0 :(得分:2)

您可以在不使用C ++定义类的情况下声明该类:

class time24;

class time12
{
 operator time24()  //time24 is undefined at this stage
 {

 }
};

class time24
{

};

答案 1 :(得分:1)

通常在c ++中你有两种类型的文件,.h和.cpp。您的.h文件是您的声明,.cpp是您的定义。

示例:

convtime.h:

#ifndef CONVTIME_H_ //this is to prevent repeated definition of convtime.h
#define CONVTIME_H_

class time24; //for the operator in class12

class time12
{
public:
    time12(int); //constructor
    operator time24();
private:
    //list your private functions and members here
}

class time24
{
public:
    time24(int); //constructor
private:
    //list your private functions and members here
}

#endif //CONVTIME_H_

convtime.cpp:

#include "convtime.h"

//constructor for time12
time12::time12(int n)
{
    //your code
}

//operator() overload definition for time12
time24 time12::operator()
{
    //your code
}

//constructor for time24
time24::time24(int n)
{
    //your code
}

答案 2 :(得分:0)

您没有指定语言 - 如果你正在处理动态类型语言,比如Python,那么就没有这样的问题 - 另一种类型只需要在执行时知道,当调用转换方法时 - 而不是在解析(编译)时 - 所以以下代码是有效的:

class Time12(Time):
   def toTime24(self):
       return Time24(self._value)

class Time24(Time):
   def toTime12(self):
       return Time12(self._value)

当调用“toTime24”方法时,全局名称“Time24”被定义为正确的类。

在C ++中 - 你可以声明一个与函数原型非常相似的类存根 - 只需这样做:

class time24;

class time12
{ ... }

class time24
{ ... }

不知道其他静态类型语言的工作原理。