我Cheese上课了.在我的程序中,我经常收集奶酪,主要是vector<Cheese>对象.
我希望能够eat()收集奶酪,如下所示:
vector<Cheese> cheeses;
//cheeses = ...
cheeses.eat();
Run Code Online (Sandbox Code Playgroud)
这该怎么做?如何在vector<Cheese>课程中添加新的成员函数?我应该只是对vector<Cheese>类进行子类化,命名子类CheeseCollection并在那里添加成员函数,还是有更好的方法?
来自Objective-C,我习惯了类,它允许我向类添加函数("方法").有类似的东西在C++中可用,还是在C++中像疯了似的子类被认为更自然?
在C++中,你根本就不会使用成员函数 - 使用自由函数:
void eat(std::vector<Cheese> const& cheeses) {
// …
}
Run Code Online (Sandbox Code Playgroud)
即使语法不同(并且您没有使用成员访问权限),这也与Obj-C类别相当.
标准库容器类未设计为可子类化,因此方法将失败.你可以做的是使用组合而不是继承 - 即有一个CheeseCollection包含奶酪矢量作为成员的类.根据您的整体设计,这可能有一些优势.但是,一般来说,上面是最C++ ic的解决方案.
两者都不是 - 你想要的是一种算法.假设你eat已经知道如何吃一个Cheese对象,将它应用于整个集合将是这样的:
std::for_each(cheeses.begin(), cheeses.end(), eat).
Run Code Online (Sandbox Code Playgroud)
与其他一些语言不同,C++并没有保持对面向对象的盲目依从性,即使它没有真正意义.
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |