我坚持在派生类之间使用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;
};
注意:我相信我添加债券或返回字符串的方法是有效的。我只是无法弄清楚如何添加两个派生类。
答案 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+
功能可能会制定一些基本的化学规则。很久以前,我对化学一无所知。 :)