命名空间用来避免命名冲突
namespace MJ{ //定义一个命名空间
int g_age; //这是全局变量
class Person {
int m_age;
};
}
class Person {
int m_height;
}
MJ::Person person;
MJ::g_age =10; //使用全局变量
using namespace MJ; //从这一行开始,下面都使用命名空间的
创建的命名空间,默认都嵌套在全局命名空间里面,它没有名字
::func(); //使用的是全局命名空间下的func()
其他编程语言的命名空间
- java Package包名(文件夹)
- Objective-C 类前缀 MJPerson
继承
struct Person { //有共性的类
int m_age;
void run() {}
};
struct Student : Person { //继承Person,把它所有东西拿过来
int m_score;
void study() {}
};
- Student是子类,subclass,派生类
- Person是父类,superclass,超类
- C++没有JAVA、Objective-C的基类
Java所有定义的类都继承它,java.lang.Object,不写也默认写了
Objective-C是继承NSObject
继承以后对象的内存布局
struct Person{ ...};
struct Student : Person { ...};
struct GoodStudent : Student { ...};
``` //父级排在内存地址的最前面
# 成员访问权限
* public:公共的(struct默认)
* protected:子类内部、当前类内部可以访问
* private:私有的,只有当前类内部访问(class默认)
struct Student : private Person { ...};
class Student : public Person { ...}; //使用这种方式把父类拿过来用