7.6类的静态成员
- 静态成员函数不与任何对象绑定在一起,它们不包含
this
指针,静态成员函数不能声明成const
的 - 通常,类的静态成员不应该在类的内部初始化.我们可以为静态成员提供
const
整数类型的类内初始值,不过要求静态成员必须是字面值常量类型的constexpr
,初始数值必须是常量表达式,因为这些成员本身就是常量表示;
class Example {
public:
static double rate = 6.5;
static const int vecSize = 20;
static vector<double> vec(vecSize);
};
//rate 应该是一个常量表达式。
//类内只能初始化整型类型的静态常量,所以不能在类内初始化vec。修改后如下:
什么是类的静态成员?它有何优点?静态成员与普通成员有何区别?
与类本身相关,而不是与类的各个对象相关的成员是静态成员。静态成员能用于某些场景,而普通成员不能。
8.1 IO类
编写函数,接受一个istream&参数,返回值类型也是istream&。此函数须从给定流中读取数据,直至遇到文件结束标识时停止。它将读取的数据打印在标准输出上。完成这些操作后,在返回流之前,对流进行复位,使其处于有效状态。
std::istream& func(std::istream &is)
{
std::string buf;
while (is >> buf)
std::cout << buf << std::endl;
is.clear();
return is;
}
什么情况下,下面的while循环会终止?
while (cin >> i) /* … */
如果 badbit、failbit、eofbit 的任一个被置位,那么检测流状态的条件会失败。
编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个独立的元素存于vector中。
void ReadFileToVec(const string& fileName, vector& vec)
{
ifstream ifs(fileName);
if (ifs)
{
string buf;
while (getline(ifs, buf))
vec.push_back(buf);
}
}