7.56:
在成员的声明之前加上关键字static使得其与类关联在一起,和其他成员一样,静态成员可以是public的或private的,静态数据成员的类型可以是常量,引用,指针,类型等等,类的静态成员存在于任何对象之外,对象中不包含任何与静态数据成员有关的函数,静态成员函数也不与任何对象绑定在一起
优点:静态成员能用于某些场景,普通成员不能,比如函数默认实参就可以用静态变量初始化
7.57
class Account { public: void calculate(){amount += amount * interestRate;} static double rate(){return interestRate;} static void rate(double); private: string owner; double amount; static double interestRate ; static double initRate(); }; double Account::interestRate = 10;
7.58:
因为静态数据成员不属于类的任何一个对象,所以它们并不是在创建类的对象时被定义的,一般来说我们不能在类的内部初始化静态成员
所以static double rate = 6.5和static vector<double > vec(vecSize);错误,需要在类外定义
因为vecSize作用仅限于给定vec一个范围,所以不需要在类外额外来定义它.
修改后如下
class Example { public: static double rate ; static const int vecSize = 20; static vector<double > vec; }; double Example::rate = 6.5; vector<double > Example::vec(vecSize);
8.1
扫描二维码关注公众号,回复:
391319 查看本文章
istream& read(istream& is){ string i; while (is>> i) { cout << i ; } is.clear(); return is; }
8.2
8.3 键入文件结束标识符时候会终止循环
8.4
ifstream is("test_2.txt"); string tmpStr; vector<string > strVec; while(getline(is, tmpStr)){ strVec.push_back(tmpStr); }
8.5
在我理解中单词应该是好几个字母拼凑在一起的,例如when,if 以空格为分割形成的字母组,想了挺久,没有头绪,翻阅网上他人的答案,都是以单个字母为一个单词输入到vec,自然是不满意的,研究了一会终于是作出了以空格为分割的vec
结果如下:
int main() { ifstream is("test_2.txt"); string tmpStr; vector<string > strVec(1); while(getline(is, tmpStr)){ for(int i = 0 ; i!= tmpStr.size();i++){ if(tmpStr[i] != ' '){ strVec[strVec.size()-1] += tmpStr[i]; }else{ strVec.push_back(""); } } } for(auto str : strVec){ cout<< str<<endl; } for (;;); return 0; }
优化后的版本
int main() { ifstream is("test_2.txt"); string tmpStr; vector<string > strVec(0); while (is >> tmpStr && !is.eof()) { cout << tmpStr << endl; strVec.push_back(tmpStr); } for (;;); return 0; }
8.6:略