C编程,变量
C Programming, Variables
当我们在类中声明变量时,然后当我们为这些变量赋值时,例如像这样
class c {
public :
int x;
int x2;
c () {
x = 0;
x2 = 0;
scanf ("%d", &x); and now we're gonna input for example 10
}
};
每次使用该类时,我的意思是每次调用构造函数时,x的值再次变为0,因为它在构造函数中被初始化为0。但是,如果不初始化该值,就会出现错误。
我的问题是,当我们一次又一次地调用构造函数时,如何保持变量的值,使其不变为零?
编辑:void example () {
int i;
scanf ("%d", &i);
switch (i) {
case 1 : {Object ob1; system ("cls"); menu ();} // this object contains a value like 20
case 2 : {Object ob2; system ("cls"); menu ();}
}
}
在对象1中有另一个切换案例,其中包括返回主菜单的选项,现在如果我再次输入1返回对象1,我看不到值20,它将是0
构造函数在每个实例中只被调用一次,所以不用担心这个问题。您永远不会将给定实例的x的值重置为0,因为它的构造函数。
你了解类和对象/实例之间的区别吗?类仅仅是对象的"切割机"。您不会像这样"调用"构造函数,而是创建类的实例(它隐式地调用构造函数):
c myObj;
c anotherObj;
这段代码将创建类c的两个实例,它们都有各自版本的x1和x2。的确,在创建anotherObj
时,构造函数会运行第二次,但它在完全不同的内存上操作。因此,myObj
中x1和x2的值不会被改变。
Edit:类成员函数的意义在于它们操作一个名为this的隐式附加形参。您可以想象"构造函数调用"实际上看起来像这样(只是为了说明目的,并不意味着是有效的代码):
c* this = malloc(sizeof(c));
constructor(c);
// With "constructor" actually being:
void ctor(c* this) {
this->x1 = 0;
this->x2 = 0;
// ..
}
这也可以在C中实现,但在c++中,它是隐式地发生的,而不必编写这样的代码。你只要写c newObj;
或c* obj = new c;
。
除此之外:成员变量应该是私有的,并且您的C库代码(scanf
)与c++类混合-在c++中使用iostreams
进行输入/输出。
可以将其存储在静态变量中。然后从静态变量中读取x的值。
相关文章:
- 附加调试器并以编程方式获取变量地址 Visual Studio
- 面临在 if 语句之外打印变量数据的问题 完成使用 Qt 编程
- 以编程方式设置全球环境变量
- 我希望通过使用模板元编程从变量ARGS中进行剥离参数
- 通过编程中的类中列出成员变量名称
- C++元编程,使用switchcase设置和获取成员变量
- 打印用于模板元编程的静态变量
- For 或 While 循环具有 2 个最大变量,其中一个是数组(编程 I)
- 无法使用元编程在变量模板中声明变量
- 具有变量数量和常量变量类型的类的编程模型
- 如何使用本机代码以编程方式查找Java本地变量的内存地址
- 如何在Qt中以编程方式为当前进程设置环境变量
- 我如何编程指针结构或类变量在c++
- 需要以编程方式初始化类变量数组,我怎么做最好
- 在编译时使用c++元编程中的运行时参数(变量)
- 在VS中以C/ c++编程方式获取Visual Studio环境变量
- 在元编程中强制执行不变量
- 静态变量对于各种编程语言和环境通常意味着什么
- 存储类型并以编程方式将另一个变量强制转换为存储的类型
- C编程,变量