gpt4 book ai didi

c++ - vector 类私有(private)/公共(public)

转载 作者:搜寻专家 更新时间:2023-10-31 00:02:54 25 4
gpt4 key购买 nike

在 C++ 中,将类的数据保留为私有(private)成员总是更好。
如果一个类有一个 vector 作为成员,将其作为私有(private)成员还是公共(public)成员更好?

如果我有一个 vector 作为私有(private)成员,我就不能轻易访问 vector 的成员函数。所以我必须为每个需要访问 vector 方法的函数设计一个方法?

给出的例子:

class MyClass{
private:
std::vector<int> _myints;
public:
get_SizeMyints(){return _myints.size();}
add_IntToMyints(int x){_myints.push_back(x));
};

还是将 vector 公开并调用 MyClass._myints.push_back(x) 更好?

--------------------编辑------------

为了清楚这个问题需要什么:

蛇.h:

enum directions{UP, DOWN, RIGHT, LEFT, IN, OUT, FW, RW };


class Snake
{
private:
enum directions head_dir;
int cubes_taken;
float score;
struct_color snake_color;
V4 head_pos;


public:

std::vector<Polygon4> p_list; //the public vector which should be private...

Snake();
V4 get_head_pos();
Polygon4 create_cube(V4 point);
void initialize_snake();
void move(directions);

void set_head_dir(directions dir);
directions get_head_dir();
void sum_cubes_taken(int x);
int get_cube_taken();

void sum_score(float x);
float get_score();

void set_snake_color();



};

现在我知道如何更改代码了。

顺便说一句...一个问题,如果我需要像这样在其他类中复制 vector :GlBox.p_list = Snake.p_list(如果是私有(private)的则有效)如果它们是私有(private)的,什么是有效的方法?
运行一个 for 循环来复制元素并将它们推回 GLBox.p_list 对我来说似乎有点低效(但可能只是一种印象):(

最佳答案

如果有人清空 vector 或重新排列所有元素都无关紧要,则将其公开。如果它很重要,那么是的,您应该将其保护/私有(private),并像您一样制作公共(public)包装器。 [编辑] 既然你说“这是一条蛇”,那就意味着如果有人来移除或更换钻头就不好了。因此,您应该将其设为 protected 或私有(private)。 [/编辑]

你可以简化其中的很多:

MyClass {
private:
std::vector<int> _myints;
public:
const std::vector<int>& get_ints() const {return _myints;}
add_IntToMyints(int x){_myints.push_back(x));
};

那个 get_ints() 函数将允许人们随心所欲地查看 vector ,但不会让他们改变任何东西。但是,更好的做法是完全封装 vector 。这将允许您稍后用双端队列或列表或其他东西替换 vector 。您可以使用 std::distance(myobj.ints_begin(), myobj.ints_end());

获取大小
MyClass {
private:
std::vector<int> _myints;
public:
typedef std::vector<int>::const_iterator const_iterator;
const_iterator ints_begin() const {return _myints.begin();}
const_iterator ints_end() const {return _myints.end();}
add_IntToMyints(int x){_myints.push_back(x));
};

关于c++ - vector 类私有(private)/公共(public),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7236008/

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