Chi*_*iel 15 c++ oop pointers reference
我有一个函数有两个类的实例作为参数:
void cookPasta(const Tomato& tomato, const Meat* meat)
{
if (meat != nullptr)
cookPastaWithMeat(tomato, *meat);
else
cookPastaWithoutMeat(tomato);
}
Run Code Online (Sandbox Code Playgroud)
正如函数所示,Tomato总是需要一个实例,而是Meat可选的,nullptr而是可以传递一个实例.我这样做是为了允许cookPasta函数被调用,即使用户从未声明过Meat该类的实例.
在函数签名中混合引用和指针是不好的做法吗?
Que*_*tin 30
你通过这种方法失去的一件事是可以传递一个临时的Meat,因为它的地址不能被采用.
为什么不使用重载,只需重命名cookPastaWithMeat和cookPastaWithoutMeat?
void cookPasta(const Tomato& tomato, const Meat& meat);
void cookPasta(const Tomato& tomato);
Run Code Online (Sandbox Code Playgroud)
你的实践很好
const关键字.但是,第二个参数pointer可以使用optional parameter featureC++ 更好一些.看看这里.
void cookPasta(const Tomato& tomato, Meat* meat = nullptr)
{
if (meat != nullptr)
cookPastaWithMeat(tomato, *meat);
else
cookPastaWithoutMeat(tomato);
}
Run Code Online (Sandbox Code Playgroud)
现在,以两种方式调用相同的函数.
cookPasta(tomato); // meat will default to nullptr
cookPasta(tomato, meat);
Run Code Online (Sandbox Code Playgroud)