標題幾乎說明了一切。我有一個構造函數爲什麼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 –