班级(私人和公共)

时间:2015-09-14 23:20:31

标签: c++ class

对于C ++中的类:我不明白何时应该创建私有成员变量和函数, 我知道他们不能从int main调用,而公共成员可以,但我不知道何时我应该将某些东西定义为私有,以及有什么好处。

有人可以用示例代码解释使用私有成员的优点是什么以及为什么它有用? (它是否阻止用户更改您所做的代码?这有用吗?)

请记住,我是一个非常“糟糕”的程序员,发现这非常混乱,所以感谢任何帮助

提前致谢

3 个答案:

答案 0 :(得分:0)

我见过的两种思想流派是:

  1. 所有数据均声明为私有。访问数据的函数被声明为public或protected,具体取决于您是否要创建子类。
  2. 与第一个相同,只是您将数据移动到受保护的部分而不是创建函数。
  3. 示例:

    class A {
        public:
            A() : m_a(0) { }
            int GetA() const { return m_a; }
            int GetA() { return static_cast<const A&>(*this).GetA(); }
            //...More code here
        protected:
            //I don't want external code to be able to modify m_a, only subclasses.
            void SetA(int a) { m_a = a; }
            //...More code here
        private:
            int m_a;
    }
    

    OR:

    class A {
        public:
            A() : m_a(0) { }
            int GetA() const { return m_a; }
            int GetA() { return static_cast<const A&>(*this).GetA(); }
            //...More code here
        protected:
            int m_a;
        private:
    }
    

答案 1 :(得分:0)

私人只是为了方便使用。例如,假设我正在制作游戏并拥有角色类:

class character 
{
private:
    int level;
public:
    character()
    void setLevel(int newLevel);
};

这允许更改级别,但如果我希望有一个最大级别,我可以在setLevel函数中定义它。现在,如果有人想要使用我的代码,他们就无法创建一个级别为3,000,000的角色。他们只能使用最高级别。

我想我的观点是帮助保持变量的行为,因为它们通常应该在类中起作用。该课程可以定义他们如何改变,而不是任何人能够随心所欲地改变他们。

答案 2 :(得分:0)

比堆栈溢出几分钟内输入的答案要好得多,但简而言之:

公开会员正在定义您希望外部世界与您的班级互动的方式。通常,最佳做法是不要使用任何变量 public ,并让外部世界通过Set / Get函数与它们进行交互。

受保护私有隐藏来自外部世界的成员,但也指定子类如何访问它们。 受保护的成员是继承的; 私人成员不是。

在风格上,我倾向于将 protected private 视为类的 public 接口使用的子例程。如果我创建一个全部为“形状”的类的集合,我将“square”,“circle”,“triangle”的 public 接口的公共代码分解出来,并将它们放入 protected 函数。我经常不会经常使用私人。 (主要是因为我做嵌入式工作,我对类之间的代码共享更感兴趣,而不是接口封装,而且我的代码从未用作外部源代码库)