C++ C++;:初始化2个对象->;输出不符合预期

C++ C++;:初始化2个对象->;输出不符合预期,c++,C++,我的程序创建两个对象(a1和a2),并用值42初始化a1,用值11初始化a2。构造函数将变量num和x设置为这个值 但我的程序输出如下(并非如预期42): 这是我的密码: #include <iostream> using namespace std; class A { static int num; int x; public: A(int n) { num = n;

我的程序创建两个对象(a1和a2),并用值42初始化a1,用值11初始化a2。构造函数将变量num和x设置为这个值

但我的程序输出如下(并非如预期42):

这是我的密码:

#include <iostream>
using namespace std;

class A {
        static int num;
        int x;
        public:
        A(int n) {
                num = n;
                x = n;
        }

        void print() {
                cout << num << endl;
                cout << x << endl;
                cout << endl;
        }
};

int A::num;

int main() {
        A a1(42);
        A a2(11);
        a1.print();
}
#包括
使用名称空间std;
甲级{
静态整数;
int x;
公众:
A(整数n){
num=n;
x=n;
}
作废打印(){

cout这很好。
num
是一个静态变量,意味着它在类的所有实例之间共享。当您在
a2
的构造函数中分配
num
时,您为所有实例分配
num

因为“num”是一个静态变量,意味着它是一个类变量:所有实例只有一个值。

静态类成员在一个类的所有实例之间共享。因此,当您创建一个a2(11)
时,num被覆盖为11


这是正常的静态行为。

您有static关键字。static关键字在所有对象之间共享,这意味着a1、a2和所有其他类型A的对象将具有相同的
num

如果移除静电,使其看起来像这样:

int num;
int x;
它应该输出

42
42

你知道
static
关键字是什么意思吗?这就是
static
的作用。为什么人们会对这个问题投反对票?当然,这是一个初学者的错误,但这个问题很好。唯一被投反对票的问题是模糊的。StackOverflow 101。@JohanHjalmarsson
42
42