在c++类中定义私有变量/属性
defining private variables/properties in c++ class
所以我发现了在类中定义私有变量的一些事情。
现在,我的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文件中定义了一个私有属性_seeds。
当我在其他地方定义属性_seeds时,比如在父类/主文件中,问题就出现了。
然后它抱怨它有多个定义。对我来说,这有点奇怪,因为我认为Apple.cpp中的_seeds属性应该是私有的(因此是未知的),但它以某种方式拾取它并在另一个文件中发生冲突。
我找了一个制作类的例子,他们在那里没有定义。cpp文件中的类属性,而只是在头文件中,它似乎神奇地在。cpp文件中创建了那些私有属性(它们在。cpp文件中的任何地方都没有定义)。
我"最接近"的语言可能是Java,我在类实现文件中定义了所有的类变量/属性,所以我有点困惑。
谁能证实:
这不是c/c++的情况,你应该只在头文件中定义私有属性。
类。cpp文件中的任何变量/属性都在"全局命名空间"中,因此它们可以在其他文件中发生冲突。
如果第二个点为真,是否可以通过在另一个类/文件中调用_seeds来访问它们?
(这可能不重要,因为我认为这只是一个语言的事情,但这是arduino的代码。)
如果你在类外编写了两个新的全局变量:
int _seeds = 0; // default
String _type = 0; // default
你只需要初始化函数中的非静态成员变量。
在c++中,必须在一个地方声明所有属性和方法。传统的方法是在头文件中这样做,所以所有包含该头文件的文件都可以使用这个类(它们需要完整的声明才能这样做!)然而,.cpp
文件中的类声明也是有效的,但是这样的类只能在.cpp
文件中使用。
int _seeds = 0; // default
String _type = 0; // default
与类没有关系。这只是两个全局变量的定义。您可以设置非静态属性的初始值的唯一方法是在构造函数中,您在问题中所做的方式看起来是正确的(假设您使用字符串类型声明Apples::_type
而不是int
)。
- 变量(或属性)可以等于类型吗?
- 输出(用于 GraphViz)提升图顶点及其属性,使用具有私有变量的类作为捆绑属性
- [[maybe_unused]] 在成员变量上,GCC 警告(不正确?)该属性被忽略
- 变量作为 C++11 属性参数
- 如何在Log4CPP属性文件中使用环境变量
- 兼容的声明 __attribute__ ((节( ".abc.dfe" ))) 常量易失性 uint8 属性变量 = 0;- 符合MISRA标准
- C 中变量的属性
- C++ - 在类中包含不是类对象属性的变量是否是一种不好的做法
- 具有仅在某些情况下引用外部变量的属性的类
- 使初始化变量可供多个属性初始化方法访问
- OpenMP中类成员变量的数据共享属性
- c++如何打印另一种类型的变量的String属性的值
- 性能对象属性与范围变量
- 类中变量的属性似乎未声明
- 如何获取 C/C++ 变量的属性
- C++:如何在类中获取具有动态变量的私有属性
- 将变量中的数字添加到对象的属性中
- GCC:变量属性"__unused__"与仅"unused"
- 在c++类中定义私有变量/属性
- 在c++中,成员变量(属性)可以驻留在寄存器中吗?