10、类和对象 6).ppt

10、类和对象 6)

嵌套类域中的名字解析 解析过程 名字使用点之前的嵌套类的成员声明 名字使用点之前的外围类的成员声明 名字使用点之前的全局作用域中的声明 嵌套类域中的名字解析 enum ListStatus { Good ,Empty , Corrupted }; class List { public: //...... private: calss ListItem { 查找:1) ListItem中 2)在List中 3)在全局域中 ListStatus status;//引用全局枚举 }; //...... }; 嵌套类域中的名字解析 enum ListStatus {Good, Empty, Corrupted}; class List { private: class ListItem; //...... public: enum ListStatus {Good, Empty, Corrupted}; //...... }; class List::ListItem { public: ListStatus status; //List::ListStatus }; 嵌套类(nested class) 类体之中而成员函数定义之外的名字解析 嵌套类成员函数体之中的名字解析 内容概要 嵌套类成员函数体之中的名字解析 解析过程 从成员函数局部域中到名字使用点前的声明 嵌套类作用域中 外围类作用域中 成员函数定义之前的名字空间域中出现的声明 嵌套类成员函数体之中的名字解析 class List { public: enum ListStatus {Good,Empty,Corrupted}; //...... }; class List { public: int list; enum ListStatus { Good,Empty,Corrupted }; private: class ListItem; { public: void check_staus(); ListStatus status;//OK }; }; int list = 0; //全局List void List::ListItem::check_status() { int value = list; //哪个list? } 为了访问全局的list必须加:: void List::ListItem::check_status() { int value = ::list; } 本次议题 介绍类的一些特殊技术 指向成员的指针 嵌套类 局部类 局部类 1、概念: 在函数体内定义的类 2、定义: 局部类的数据成员和成员函数必须完全定义在类体内, 因此局部类不允许声明static成员 void foo() { class Bar { public: void fn() { } private: int ival; static int count;//error }; } 局部类 3、局部类和外围函数中元素的互访 局部类中不能使用函数中的变量 void foo() { int iival; class Bar { public: void fn() { iival; //Error } private: int ival; }; } 不能访问外围函数的变量 局部类 外围函数不能访问内部类的非公有成员,可通过类的 对象、指针、引用访问公有成员 ... ... void foo() { int iival; class Bar { public: Bar():ival(100){} void display() { cout ival endl; } private: int ival; }; Bar obj; //cout obj.ival endl; //error obj.display(); //right,只能通过类的对象、引用、指针访问 } int main() { foo(); system(PAUSE); return 0; } 通常将局部类的成员限定为公有的

文档评论(0)

1亿VIP精品文档

相关文档