2015-04-05 1 views
0

Как я могу применить объект к типу данных, например int/string? Ниже приведен пример кода:Включить объект в тип данных?

Я хочу, чтобы иметь возможность использовать следующие дополнить integers и var например var = <expression> + <expression> ; //expression can be int or 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; 
}; 

и вот код добавления:

#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

Если у вас есть конструктор, который принимает ровно один параметр eter (в этом случае int) тип параметра может быть неявно преобразован во временный объект типа vars. Затем вам просто нужно перегрузить operator+ за 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 

Опять explicit не является обязательным, но заставка.

+0

в 'auto sum = 1 + static_cast (var);' я получу '1 + var.value;'? другими словами, каково значение var, которое я получу после того, как оно будет передано в 'int' –

+1

. Это зависит от того, как вы определяете' operator int() '. Это зависит от вас. Но в этом примере кода - да. – Otomo