本节大意
介绍了面向对象编程中的static机制
细节摘录
1. 使用static的好处:a 避免和其他全局事物产生命名冲突 b 封装性 c 可读性
2. 访问方式 类::static对象名
3. static函数的限制 a 成员不能用this b 不能声明为const,也没必要声明。 c 不能声明为虚函数
4. static数据成员必须在类的外部定义一次且只能定义一次
5. 对于const成员可以在声明时初始化,但还是要在外部定义一次。
6. static成员变量可以用作默认实参,可以在对象中定义自身类型。
课后习题
1. 就是某个类的所有对象共享的成员,优点见细节摘录1,缺点是使用起来有不少限制,其他参见细节摘录。
2. 略
3.4.5
介绍了面向对象编程中的static机制
细节摘录
1. 使用static的好处:a 避免和其他全局事物产生命名冲突 b 封装性 c 可读性
2. 访问方式 类::static对象名
3. static函数的限制 a 成员不能用this b 不能声明为const,也没必要声明。 c 不能声明为虚函数
4. static数据成员必须在类的外部定义一次且只能定义一次
5. 对于const成员可以在声明时初始化,但还是要在外部定义一次。
6. static成员变量可以用作默认实参,可以在对象中定义自身类型。
课后习题
1. 就是某个类的所有对象共享的成员,优点见细节摘录1,缺点是使用起来有不少限制,其他参见细节摘录。
2. 略
3.4.5
#include <iostream>
using namespace std;
class Foo {
private:
int a;
public:
Foo(int a);
int GetNum();
};
Foo :: Foo(int a) {
this->a = a;
}
int Foo :: GetNum() {
return a;
}
class Bar {
private:
static int b;
static Foo c;
public:
Bar();
Foo FooVal();
int callsFooVal();
};
// 标准声明加定义格式
int Bar :: b=0;
Foo Bar :: c(0);
Bar :: Bar() {
}
Foo Bar :: FooVal() {
b++;
return c;
}
int Bar :: callsFooVal() {
return b;
}
int main()
{
Bar b;
cout << b.FooVal().GetNum() << endl;
b.FooVal();
cout << b.callsFooVal() << endl;
return 0;
}