一、指向成员的指针
1. 指向数据成员的指针
int A::*pint = NULL;
int A::*p = &A::m_val; // 则可以用p来访问成员m_val的值,当然是与对象挂勾的;
2. 指向成员函数的指针
void A::fun(int); //成员函数
void (A::*pf)(int);
获得成员函数地址:&A::fun;
A::pf = &A::fun; // pf是指向函数指针的指向 注意不是:pf = A::fun;
A a; a.*pf; // a.fun();
二、嵌套类
1). 在一个类中嵌套的定义另一个类;
class Tree // 内围类
{
public:
class Node // 外围类
{
static int va;
};
};
嵌套类的成员函数可以在嵌套类里或外定义,但不能在外围类里定义;实现时要把外围类的作用域加入;
int Tree::Node::va;
嵌套类可以只在外围类中声明,实现放在外围类:
class A
{
public:
class B; // 声明嵌套类
int m_val;
};
class A::B // 嵌套类的实现
{
public:
int m_val; // 成员变量与A类中的成员变量可以相同;是两个不同的作用域
};
main()
{
A::B ab;
}
1. A类不能访问内部类B的非公有成员变量
2)类成员函数的名字解析
名字解析是从小{}开始寻找,依次在外围{}中找;如果要直接调用全局可以用::运算符;
3)局部类
void fun()
{
int v = 0;
class InC
{
public::
void Infun()
{
int a =v; // 错
}
}
}
类成员函数中定义的类;局部 类中不能定义static成员;外部不能访问局部类中的成员;
局部类中不能直接使用外围函数的变量