如何将对象添加到类中的静态向量
Posted
技术标签:
【中文标题】如何将对象添加到类中的静态向量【英文标题】:How to add an object to a static vector within a class 【发布时间】:2019-12-26 04:03:23 【问题描述】:我正在用 C++ 编写一个简单的程序,让用户可以输入带有他的姓名、类别和评级的电影。我创建了两个类,第一个类是电影类。此类具有用于实例化具有我之前所说的属性(名称、类别、评级)的新电影对象的构造函数。然后我有第二节课叫做电影。在这个类中,我想将每个 Movie 对象添加到静态向量中,然后对它们进行操作。
问题是,当我尝试将 Movie 对象添加到矢量时,它似乎跳过了添加它的部分。在其他方法 findMovie() 中,当我遍历这个向量时,它返回的是空的。
如果现在不正确,我如何正确创建静态矢量,以及如何将电影对象添加到该矢量。
代码如下:
电影 Hpp:
#ifndef MOVIE_HPP_
#define MOVIE_HPP_
#include <string>
#include <vector>
#include <iostream>
class Movie
private:
std::string name;
std::string rating;
std::string category;
int id;
static int MoviesCreated;
friend class Movies;
public:
//Constructor
Movie(std::string, std::string, std::string, int, int);
Movie(std::string, std::string, std::string, int);
Movie();
//Copy constructor
Movie(const Movie &);
//Destructor
~Movie(void);
//Methods
std::string getName(void) const;
std::string getRating(void) const;
std::string getCategory(void) const;
int getLike(void) const;
int getId(void) const;
static int getMoviesCreated(void);
;
电影.hpp:
#ifndef MOVIES_HPP_
#define MOVIES_HPP_
#include <string>
#include <vector>
#include "Movie.hpp"
class Movies
private:
friend class Movie;
static std::vector <Movie> moviesCollection;
public:
void addMovie(Movie);
void deleteMovie(std::string);
Movie * findMovie(std::string);
static std::vector <Movie> getCollection();
;
#endif
电影.cpp:
#include "Movies.hpp"
std::vector <Movie> Movies::moviesCollection;
std::vector <Movie> Movies::getCollection(void)
return moviesCollection;
void Movies::addMovie(Movie m)
Movies::getCollection().push_back(m);
方法addMovie,不添加电影。
这就是我在函数内的 main 中实现它的方式。
void enterMovie(void)
string name, rating, category;
int like,c;
cout << "Enter the name: ";
getline(cin, name);
cout << "Enter the rating: ";
getline(cin, rating);
cout << "Enter the category: ";
getline(cin, category);
cout << "Enter a calification between 1-10 to rate this movie: ";
cin >> like;
if((c= getchar()) =='\n') c+=c;
Movie Mov(name, rating, category, like);
cout << "Movie entered: \n";
display(Mov);
collections.addMovie(Mov);
“collections”是我将其设为全局的 Movies 对象。
Movies collections;
int main()
这个问题需要两个类一起使用。
我最近在学习 c++,所以对这段代码的每一次改进都会很有帮助
【问题讨论】:
【参考方案1】:getCollection
返回当前集合的副本。既然要修改集合,就应该返回一个引用:
static std::vector<Movie> &getCollection();
注意在类型后面添加&
以将其从值更改为引用。
【讨论】:
以上是关于如何将对象添加到类中的静态向量的主要内容,如果未能解决你的问题,请参考以下文章