如何让一个类有编译期间的常量成员?要求使用另外一个关键字static
static意味着 "不管类的对象被创建多少次,都只有一个实例"
必须在static const定义的地方初始化。
在一个类里创建和使用一个叫做size的static const,这个类表示一个存放
字符串指针的栈
//: C08:StringStack.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Using static const to create a
// compile-time constant inside a class
#include <string>
#include <iostream>
using namespace std;
class StringStack {
static const int size = 100;
const string* stack[size];
int index;
public:
StringStack();
void push(const string* s);
const string* pop();
};
StringStack::StringStack() : index(0) {
memset(stack, 0, size * sizeof(string*));
}
void StringStack::push(const string* s) {
if(index < size)
stack[index++] = s;
}
const string* StringStack::pop() {
if(index > 0) {
const string* rv = stack[--index];
stack[index] = 0;
return rv;
}
return 0;
}
string iceCream[] = {
"pralines & cream",
"fudge ripple",
"jamocha almond fudge",
"wild mountain blackberry",
"raspberry sorbet",
"lemon swirl",
"rocky road",
"deep chocolate fudge"
};
const int iCsz =
sizeof iceCream / sizeof *iceCream;
int main() {
StringStack ss;
for(int i = 0; i < iCsz; i++)
ss.push(&iceCream[i]);
const string* cp;
while((cp = ss.pop()) != 0)
cout << *cp << endl;
getchar();
} ///:~
size用来决定数组stack的大小
size实际上是一个编译期间常量,隐藏在类中
push()带有const string*参数,pop()返回一个const string*,StringStack
保存const string*
输出
deep chocolate fudge
rocky road
lemon swirl
raspberry sorbet
wild mountain blackberry
jamocha almond fudge
fudge ripple
pralines & cream