C++ 构造函数和复制构造函数访问相同的派生类
是否可以使用复制构造函数从派生类“twin”初始化相同的派生类 我的意思是我想初始化一个类型为C++ 构造函数和复制构造函数访问相同的派生类,c++,constructor,copy-constructor,derived-class,base-class,C++,Constructor,Copy Constructor,Derived Class,Base Class,是否可以使用复制构造函数从派生类“twin”初始化相同的派生类 我的意思是我想初始化一个类型为Computer的对象,它与我已经初始化的类型为User的对象相同。 计算机载波=用户载波之类的东西 例如 main.cpp #include "game.h" using namespace std; int main() { User carrier(5, "Airship Carrier"); //Computer carrier = User::carrier; };
Computer
的对象,它与我已经初始化的类型为User
的对象相同。
计算机载波=用户载波代码>之类的东西
例如
main.cpp
#include "game.h"
using namespace std;
int main()
{
User carrier(5, "Airship Carrier");
//Computer carrier = User::carrier;
};
它们是相同的派生类,我只是将它们作为一种虚拟和可视化的方式来表示编程代码中的用户
和AI战舰,用于测试船舷之间的碰撞和射击。用户
和计算机
是完全不同的类型。您可以为其添加模板副本构造函数
在基类中添加getter:
class Game
{
public:
//No constructor Intentional
int get_iSize() { return m_iSize; }
string get_strName() { return m_strName; }
protected:
int m_iSize;
string m_strName;
};
然后
class计算机:公共游戏
{
公众:
样板
计算机(const T&T){
m_iSize=t.get_iSize();
m_strName=t.get_strName();
}
// ...
};
并考虑将构造函数显式化以避免意外的隐式铸造。< /P> < P>或者,您需要2种不同类型,然后不能这样做(不能从狗创建一只猫),或者希望它们共享同一类型,但要通过不同的类型名称来操作,那么您应该只使用TyBuff:
class Game
{
public:
Game(int _iSize, string str_Name);
private:
int m_iSize;
string m_strName;
};
using User = Game;
using Computer = Game;
然而,从设计的角度来看,这种方式似乎不正确,因为计算机不是用户(IMHO)
另一方面,您可以在用户和计算机中创建一个从游戏构建的构造函数;比如:
class Computer {
Computer(const Game &game) : Game(game) { /*...*/ }
/*...*/
};
但事实仍然是,从计算机构建用户似乎“很奇怪”。您的用户
和计算机
类型之间的唯一关系是它们都源自游戏
因此,没有办法通过以您想要的方式委托给另一个来实现的构造函数(缺少包含,即创建不同的对象,而不是使用一种类型的构造函数初始化不相关类型的实例)。当您在代码中说“无构造函数”时,你知道有隐式声明的构造函数吗?你可以用任何类型的对象编写构造函数<代码>计算机::计算机(用户const&other){/*…*/}
——您如何使复制构造函数这样做,这取决于您自己。为了访问任何用户
的私人成员,您需要使用可怕的朋友
…我认为您需要在计算机中定义一个以用户为参数的构造函数。如果它们“相同”,为什么是两个独立的类呢?Game
的一些实现缺少并将导致未定义的行为。我知道这不是问题的核心,但仍然值得指出。注意安全,在所有非final
(这是一个非常有用的新C++11关键字)类中使用它。他正在实现一个战舰游戏。他为用户
飞船和计算机
飞船各上了一门课。我同意,一般来说,设计很糟糕,但这就是为什么他考虑从用户
一台创建/分配计算机
飞船的原因。
class Game
{
public:
Game(int _iSize, string str_Name);
private:
int m_iSize;
string m_strName;
};
using User = Game;
using Computer = Game;
class Computer {
Computer(const Game &game) : Game(game) { /*...*/ }
/*...*/
};