我有以下类架构:
Pokemon
|
--------------------------- ... -------- ...
| | |
Bulbasaur Charamander ... Ditto ...
我想从Pokemon
的实例创建一个新的Ditto
类,如:
new Charamander(Ditto);
为此,我的想法是使用超类构造函数:
new Charamander(Pokemon);
Pokemon
是{{1>} 超类。
但我不知道如何访问我的Ditto
超类来提供Ditto
的构造函数。
答案 0 :(得分:2)
如果你想构建一个类的实例作为兄弟类的副本,那么我看到两个选项:
每个派生类都必须为每个兄弟类提供(复制?)构造函数。
每个派生类都必须提供一个从其常用超类中复制的构造函数。
后者听起来更好,因为它减少了要写入的代码量(并且可能会在以后导致更少的维护问题)。
当然,第三个选项是派生类是否必要。
但是,我为2 nd 选项做了一些示例:
#include <iostream>
#include <string>
class Pokemon {
private:
static int _idGen;
protected:
int _id;
public:
Pokemon(): _id(++_idGen) { }
Pokemon(const Pokemon&) = default;
virtual const char* what() const = 0;
};
int Pokemon::_idGen;
class Ditto: public Pokemon {
public:
Ditto(): Pokemon()
{
std::cout << "Ditto created. (ID: " << _id << ")\n";
}
Ditto(const Pokemon &other): Pokemon(other)
{
std::cout << "Ditto cloned from " << other.what() << " (ID: " << _id << ").\n";
}
virtual const char* what() const override { return "Ditto"; }
};
class Charamander: public Pokemon {
public:
Charamander(): Pokemon()
{
std::cout << "Charamander created. (ID: " << _id << ")\n";
}
Charamander(const Pokemon &other): Pokemon(other)
{
std::cout << "Charamander cloned from " << other.what() << " (ID: " << _id << ").\n";
}
virtual const char* what() const override { return "Charamander"; }
};
int main()
{
Charamander char1;
Ditto ditto1;
Charamander char2(ditto1);
Ditto ditto2(char1);
return 0;
}
输出:
Charamander created. (ID: 1)
Ditto created. (ID: 2)
Charamander cloned from Ditto (ID: 2).
Ditto cloned from Charamander (ID: 1).
抱歉,如果我混合了口袋妖怪的话。并不是说我知道这些东西的一切,除了有这个漫画系列(以及它周围的所有商品)......
关于免费的C ++书籍:你可以通过谷歌c++ book online
找到一些。如果您对质量有疑问,请改用Google good c++ book online
...