标题几乎说明了一切。我有一个构造函数为什么C++构造函数接受不正确的类型作为参数?
Brain::Synapse::Synapse(Neuron *new_neuron);
但是,当我将它传递了不正确的类型(成员从载体这样)
std::vector<Motor_Neuron*> neurons;
Synapse *new_synapse = new Synapse(neurons[neuron_index]);
它工作得很好(这是个问题)。 Motor_Neuron
是从Neuron
派生的类,所以我怀疑这是原因。我的问题最终是我需要一些s连接到Neuron
s和其他到Motor_Neuron
s。类有一个成员,它是指向“连接的神经元”的指针。我一直在试图重载构造函数,但我不认为这会起作用,因为如果其中一个构造函数接受了错误的类型,我就不会看到如何选择正确的构造函数。
你不想这样做,因为'Motor_Neuron'是从'Neuron'派生出来的,所以它可以工作。也就是说,如果你写了在突触中删除了构造函数,它应该拒绝代码:'Synapse(Motor_Neuron *)= delete;'。正确的做法可能有另一个'Neuron'的子类,像'Regular_Neuron'? – Justin
如果构造函数接受'Neuron'类型,它应该接受任何'Neuron'派生类型,它的继承方式。我想你应该分析'Motor_Neuron'类型的特定构造函数的需要。 –
@Justin Well'Neuron'就是那个子类。 'Motor_Neuron's只是有一些额外的功能。然而,他们不允许有突触,并且迄今为止解决了我确定突触永远不会被添加,但我认为一些重构可能是有序的,因为这有点像圆椭圆问题https:///en.wikipedia.org/wiki/Circle-ellipse_problem –