命名空间-继承-成员访问权限

命名空间用来避免命名冲突

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 { ...};   //使用这种方式把父类拿过来用

猜你喜欢

转载自www.cnblogs.com/sec875/p/12284139.html
今日推荐