当谈到创建类时,我被告知没有公共数据成员。这很好,我明白为什么,但这是我的问题。我有一个我在类中使用的结构(线性链表)。我真的很想将其中一个struct字段(一个数组)初始化为NULL,这样我就可以检查客户端是否传递了有效的结构,而不是未经初始化的那些充满垃圾值的结构。我意识到C++不会让我在struct声明中设置一个默认值,所以我如何保护客户端不给我垃圾?结构或类,公共数据呢?
struct task {
char *description;
char *name;
float time_remaining;
float time_spent;
};
然后在我的课,我试图做一些事情,如:
//I am making a copy of "to_add" and storing it in the LLL
int list::add_to_list(const task & to_add)
{ /.../ }
我不希望用户添加一堆未初始化“任务的”到链表...什么去做?当我将该结构转换为类并将数据成员移动到私有时,我尝试访问数据成员以制作它们的副本。我非常小心,不要做任何事情来影响var的值,但是我无法摆脱编译器给我提供有关“错误:将'const task''作为'char'task :: get_comp_name ()'丢弃限定符[-fpermissive]“(”get_comp_name“)是我确定没有编辑任何值的获取者之一,只是传给我一个副本)请在拍摄自己之前帮助我。在脸上。
我无法理解问题。没有公共数据成员意味着访问可能对“外部”世界“有趣”的数据的唯一方式是通过吸气剂,如果需要设置它们,则必须通过一个setter来完成。当一个实例被创建时,你可以将你的私有成员初始化为任何你想要的。任何从外部作为方法参数传递的东西都可能是不安全的,但这是“正常的”,我不明白你是如何将它与非公开数据要求相耦合的,它们在我看来有两个不同的“事实”。你能解释得更好吗? – ShinTakezou 2012-04-20 05:42:12
错误是因为你没有声明函数const。如果你真的想提供访问者而不是公共数据,那么getter应该像'char const * get_comp_name()const;'那样。 – 2012-04-20 06:25:51