从派生类添加对象

时间:2017-06-26 01:08:28

标签: c++ class derived

我坚持在派生类之间使用operator +。这是我第一次使用派生类,所以任何提示都会非常感激。

无论如何,代码:

// Base class
class atom { ... }
// Not quite sure what the base class needs

//derived class
class hydrogen: public atom {
private:
    double bonds_ = 1;
public:
//other code
//method that returns string of bonds_
//method that adds bonds_
}

//derived class
class carbon: public atom {
private:
    double bonds_ = 4;
public:
//other code
//method that returns a string of bonds_
//method that adds bonds_
}

int main(){
hydrogen h;
carbon c;

h = c + h;
// adding a derived class with another

std::cout << h.get_bond_string() << std::endl;
//should be 5 

return 0;
}

我无法找到将两个派生类对象一起添加的方法。有什么想法吗?

我尝试在派生类中添加一个运算符函数,例如:

//in the carbon derived class,

hydrogen carbon::operator+(hydrogen h){
    carbon c; //creates a default carbon c
    h.add_bonds(c, 1);

//adds the bonds together; first parameter is the element,
//second parameter is quantity of the element


return h;
};

注意:我相信我添加债券或返回字符串的方法是有效的。我只是无法弄清楚如何添加两个派生类。

1 个答案:

答案 0 :(得分:2)

这似乎可以使用一些模板

首先是基本的atom

class atom
{
private:
    size_t bonds_;

public:
    explicit atom(size_t const bonds)
        : bonds_{bonds}
    {}

    // Other functions...
    // For example the `add_bonds` function
};

然后是子类

struct hydrogen : public atom
{
    hydrogen()
        : atom{1}
    {}
};

struct carbon : public atom
{
    carbon()
        : atom{4}
    {}
};

最后是模板operator+函数

template<typename A, typename B>
B operator+(A a, B b)
{
    // TODO: b.add_bonds(1, a);
    return b;
}

这将允许你写

h = c + h;

c = h + c;

或更一般地

auto new_atom = h + c;  // or c + h

重要免责声明:所提供的operator+功能可能会制定一些基本的化学规则。很久以前,我对化学一无所知。 :)