c++ - 在 C++ 类中定义私有(private)变量/属性

标签 c++ class

所以我发现了一些与在类中定义私有(private)变量有关的东西。

目前,我的 Apple.h 文件如下所示:

#ifndef Apples_h
#define Apples_h

class Apples {
    public:
        Apples();
        void eat();
        void peel();
        void slice();

    private:
        int _seeds;
        String _type; // originally int by mistake
};

#endif

我的 Apple.cpp 文件如下所示:

#include "Apples.h"

int _seeds = 0; // default
String _type = 0; // default

Apples::Apples(){
    _seeds = 5000;
    _type = "notYummy";
}

// pretend all the public methods are implemented and are fine (no issues with them)

这实际上工作正常:我在我的头文件和 .cpp 文件中定义了一个私有(private)属性 _seeds。

当我在其他地方定义属性 _seeds 时,比如在父类/主文件中,就会出现问题。

然后它提示它有多个定义。对我来说,这有点奇怪,因为我认为 Apple.cpp 中的 _seeds 属性应该是私有(private)的(因此是未知的),但它以某种方式拾取它并在另一个文件中发生冲突。

我找了一个创建类的例子,他们没有在 .cpp 文件中定义类属性,而是只在头文件中定义类属性,它似乎神奇地在 .cpp 中创建了那些私有(private)属性文件(它们未在 .cpp 文件中的任何位置定义)。

我“最接近”的语言可能是 Java,为此我在类实现文件中定义了所有类变量/属性,所以我有点困惑。

谁能证实:

  1. c/c++ 不是这种情况,您应该只在头文件中定义私有(private)属性。

  2. 类 .cpp 文件中的任何变量/属性都是“全局命名空间”中的一些方式,它们可以在其他文件中发生冲突。

如果第二点为真,是否可以通过在另一个类/文件中调用 _seeds 来实际访问它们?

(这可能并不重要,因为我认为这只是一种语言问题,但这是 arduino 的代码。)

最佳答案

如果您将它们写在类之外,您将新定义两个全局变量:

int _seeds = 0; // default
String _type = 0; // default

您只需像之前那样在构造函数中初始化非静态成员变量。

关于c++ - 在 C++ 类中定义私有(private)变量/属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33230247/

相关文章:

c++ - 将内存文件添加到 clang CompilerInstance

c++ - 自定义类型作为 QT Designer 中的属性

C++ 将一个对象的值复制到另一个对象

java - 如何执行包含来自不同java程序(runtime.exec())的带有某些参数的方法的java类文件?

C++ 多个具有相同名称的类

c++ - CMakeLists.txt : (add_executable): No SOURCES given to target: Tutorial

C++ 子字符串为什么要这样做?

c++ - 双端队列随机访问迭代器比较产生意外结果

iphone - Objective-C 中的特定类类型参数

PHP、OOP、不同的表述