如果将类A定义在类C的内部,那么类A就是一个内部类(嵌套类)
代码示例:
class Person {
private:
int m_age;
public:
Person() {
cout << "Person()" << endl;
}
// Car
class Car {
int m_price;
public:
Car() {
cout << "Car()" << endl;
}
};
};
内部类的特点
- 支持public、protected、private权限
- 成员函数可以直接访问其外部类对象的所有成员(反过来则不行)
- 成员函数可以直接不带类名、对象名访问其外部类的static成员
- 不会影响外部类的内存布局
cout << sizeof(Person) << endl; // 打印4
- 可以在外部类内部声明,在外部类外面进行定义
class Person {
private:
static int ms_legs;
static void other() {
}
int m_age;
void walk() {
}
// Car
class Car {
int m_price;
public:
Car() {
cout << "Car()" << endl;
}
// 成员函数可以直接访问其外部类对象的所有成员(反过来则不行)
void run() {
Person person;
person.m_age = 10;
person.walk();
// 成员函数可以直接不带类名、对象名访问其外部类的static成员
ms_legs = 10;
other();
}
};
public:
Person() {
cout << "Person()" << endl;
Car car;
}
};
在外界不能直接使用内部类,需要加上外部类
Person::Car car;
内部类声明和实现
1.拆分内部类的函数实现
class Point {
class Math {
// 内部类函数的声明
void test();
};
};
// 内部类函数的实现
void Point::Math::test() {
}
2.拆分内部类的实现
class Point {
// 内部类声明
class Math
};
// 内部类实现
class Point::Math {
void test(){
}
}
3.拆分内部类的具体实现
class Point {
// 内部类声明
class Math
};
// 内部类实现
class Point::Math {
void test();
}
class Point::Math::test() {
void test(){
}
}