类的类型成员
2023年12月21日 2023年12月21日
受访问说明符的限制
先声明后使用
在类中定义了类型成员之后, 才能使用类型成员
建议在类定义的开始处给出. 在友元关系之后
- 如果声明中使用,必须在声明之前定义
- 如果在定义中使用,类型成员在类定义中的位置不受限制
1class Account 2{ 3private: 4 Money bal; // bal声明之前无Money的定义,错误 5 typedef double Money; 6};
正确
1class Account 2{ 3private: 4 void test() { Money i = 5; } 5 typedef double Money; 6 Money bal; 7};
使用typedef或using定义
1class Screen 2{ 3 public: 4 typedef string::size_type pos; 5 6 private: 7 pos cursor = 0; 8};
1class Screen 2{ 3 public: 4 using pos = string::size_type; 5 6 private: 7 pos cursor = 0; 8};
类外部使用类型成员
1class Screen 2{ 3 public: 4 using pos = string::size_type; 5 6 private: 7 pos cursor = 0; 8}; 9 10Screen::pos wd = 0;
类相关的非成员函数的声明
1class Screen() 2{ 3 public: 4 typedef string::size_type pos; 5 void setHeight(pos); 6 pos height = 0; 7}; 8 9Screen::pos verify(Screen::pos);
定义在类内的类型成员不能与类外的类型名相同
一般情况,内层作用域可以重新定义外层作用域中的名字,即使该名字已经在内层作用域中使用过
在类中,不能重新定义外层作用域的类型名
1typedef double Money; 2 3class Account 4{ 5private: 6 typedef double Money; // 错误 7};