注册 登录
编程论坛 C++教室

为什么无论sumnum的值是多少,程序一直输出50

孤狼A组 发布于 2015-11-15 11:48, 834 次点击
#include<iostream>
using namespace std;
class Book
{public:
    Book(int w);
    static int sumnum;
    static void display();
 private:
    int num;
};
Book::Book(int w)
{
  num=w;
  sumnum=120;
  sumnum-=w;
 
}
void Book::display()
{ cout<<Book::sumnum<<endl;}
int Book::sumnum=10000;
int main()
{
  Book b1(20);
  Book b2(70);
  b1.display();
  b2.display();
 
  
  return 0;

}
5 回复
#2
wengbin2015-11-15 14:28
程序代码:
#include<iostream>
using namespace std;
class Book
{public:
    Book(int w);
    int sumnum;
    void display();
private:
    int num;
};
Book::Book(int w)
{
  num=w;
  sumnum=120;
  sumnum-=w;
}
void Book::display()
{
      cout<<sumnum<<endl;
}
int main()
{
  Book b1(20);
  Book b2(70);
  b1.display();
  b2.display();


  return 0;

}

把静态字符删掉就可以了,我也不知道原因,楼主弄清楚了可以告诉我一下
#3
rjsp2015-11-16 08:27
不知道楼主想干什么,叫人如何回答?
#4
孤狼A组2015-11-17 14:30
回复 3楼 rjsp
我想表达的意思是,sumnum是静态变量,在赋值的时候,每次赋给它不同的值,最后输出的结果应该不一样呀。可为什么每次不同的赋值都得到相同的结果
#5
孤狼A组2015-11-17 14:56
回复 2楼 wengbin
在类体外,对静态变量初始化了,但在构造函数里改变了,变量的值,即调用构造函数的时候,sumnum都等于120,sunnum=120-20=100,接着,又调用构造函数,sumnum被赋值为120,,sumnum=120-70=50,最后sunnum=50的值保留不释放,调用b1.display()和b2.display()时,输出最终的sumnum的值50;我把静态变量与常变量搞混了,我以为静态变量的值不允许改变。
#6
a8530528792015-11-17 23:38
回复 楼主 孤狼A组
在C++中,静态成员函数的初始化,是在类外进行的
1