C编程,变量

C Programming, Variables

本文关键字:变量 编程      更新时间:2023-10-16

当我们在类中声明变量时,然后当我们为这些变量赋值时,例如像这样

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的值。