将对象转换为数据类型?

时间:2015-04-05 21:26:25

标签: c++ typecast-operator

如何将对象转换为数据类型,比如int / string?以下是一个示例代码:

我希望能够使用integersvar添加以下内容 示例var = <expression> + <expression> ; //expression can be int or var

以下是var:

的代码
#pragma once
#include <string>

class vars
{
public:
    vars(std::string Name):name(Name){value = 0;}
    void setValue(int val);
    int getValue(void) const; 
//  std::string getName(void) const;
    ~vars(void);
private:
    std::string name;
    int value;
};

这是add的代码:

#pragma once
#include "action.h"
#include "vars.h"

class add: public action
{
public:
    add(vars& v, int s1, int s2):target(v),source1(s1),source2(s2){} //downcast the vars to int if needed, how to do so explicitly?
    virtual void excute ();
    ~add(void);
private:
    vars& target; //not sure of it
    int source1, source2;
};

1 个答案:

答案 0 :(得分:1)

如果你有一个只接受一个参数的构造函数(在这种情况下是int),那么参数的类型可以隐式转换为vars类型的临时对象。然后,您只需要重载operator+的{​​{1}}。

vars

这是直接的解决方案。

最好将只有一个参数的构造函数定义为vars(int a); // Add this constructor vars & operator+=(const vars other) { value += other.value; // Or some other operations return *this; } // This as memberfuncion inside the vars class vars operator+(vars left, const vars & right) { return left += right; } // This outside the class ,以避免不必要的隐式转换。但如果这是你想要的,你也可以不用它。

您希望获得explicit(或其他类型)作为结果的另一种情况可以通过重载int 类型来解决。例如:

operator

同样,explicit operator int() { return value; } // Inside class definition // Which is called like: vars var("meow"); auto sum = 1 + int(var); // The C-Style auto sum = 1 + static_cast<int>(var); // The better C++ style 是可选的但是更安全。