class - c++ 类中的static 成员变量可以通过cin输入吗
天蓬老师
天蓬老师 2017-04-17 12:07:18
0
2
586

如果可以,如何实现?

比如,Student类中有一个满分标准是需要用户输入的
Class Student{
int static StandardFullScore;
}
貌似
cin >> Student :: StandardFullScore;


构建一个对象后Student s;
然后 cin >> s.StandardFullScore;

这两种方法都不行?

是不是本来这么做就是不可以的呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(2)
伊谢尔伦
#include<iostream>
using namespace std;

class Demo{
  public: 
  int a;
  static int c;
};


static int b;
int main(){
  
 Demo d=Demo();
 cin>>b;
 cout<<"b="<<b<<endl;
 cin>>d.a;
 cout<<"the result="<<d.a<<endl;
 //cin>>Demo::c; //error
 //cout<<"c="<<Demo::c<<endl; //error
 //Demo::c=3; //error
 //int Demo::c=3; //ok
 
 d.a=3; //ok
 //cout<<"c="<<Demo::c<<endl; //error
 return 0;
}

首先c++中規定類別的靜態成員變數必須是在類別中聲明,在類別外定義,從上面註解的處看到,直接呼叫賦值語句

Demo::c=3

是錯誤的,編譯器提示不知道c的型別。在來看輸入cin>>Demo.c這樣為啥不行呢,可以知道,內部首先是轉換成basic_istream(cin,&c),而此時編譯器並不知道靜態成員變數c是什麼類型,traits特性不能特化成功,因此呼叫失敗。

那麼,這裡替代做法就是輸入一個變量,然後透過賦值或成員函數來設定Student :: StandardFullScore;即可

阿神

懷疑題主只是忘記定義靜態變數了,靜態變數在類別中是聲明,如果只聲明未定義但不呼叫是不會有問題的,但如果未定義還使用了這個變量,就會編譯錯誤了。

#include <cstdio>
#include <iostream>
using namespace std;

class zz{
public:
    static int b;//声明静态变量
};
int zz::b;//定义静态变量

int main()
{
    cin>>(zz::b);//正常使用
    cout<<(zz::b);
    return 0;
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!