gpt4 book ai didi

c++ - 为什么 C++ 构造函数接受不正确的类型作为参数?

转载 作者:行者123 更新时间:2023-11-28 01:46:23 32 4
gpt4 key购买 nike

标题几乎说明了一切。我有一个构造函数

Brain::Synapse::Synapse(Neuron *new_neuron);

但是当我传递给它一个不正确的类型时(来自这样一个 vector 的成员)

std::vector<Motor_Neuron*> neurons;
Synapse *new_synapse = new Synapse(neurons[neuron_index]);

它工作得很好(这就是问题所在)。 Motor_NeuronNeuron 的派生类,所以我怀疑这就是原因。我的问题最终是我需要一些 Synapse 连接到 Neuron 和其他连接到 Motor_NeuronSynapse 类有一个成员,它是指向“连接的神经元”的指针。我一直在尝试重载构造函数,但我认为这行不通,因为如果其中一个构造函数接受了错误的类型,我将看不到如何选择正确的构造函数。

最佳答案

如果 Motor_Neuron 继承自 Neuron,那么它不是错误的类型。这就是继承的全部基础;继承的类它们的父类,只是有一些额外的点点滴滴。

这听起来更像是您需要处理应用程序的类层次结构。 SOLID 原则是很好的指导方针。相关的是 Liskov 替换原则,它指出“程序中的对象应该可以用其子类型的实例替换,而不会改变该程序的正确性。”如果您的 Motor_Neuron 不能充当 Neuron 的角色,那么它不应该继承它。如果它需要利用 Neuron 的一些功能,也许让它有一个 Neuron 作为成员并从那里使用它的功能。

创建 Motor_Neuron 构造函数并删除它或抛出异常是有变通办法的,但我真的不能容忍尝试修复这样的症状,而是要找到源头;您的设计。

关于c++ - 为什么 C++ 构造函数接受不正确的类型作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44896665/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com