C++类层次结构

来源:互联网 发布:王者荣耀装备数据分析 编辑:程序博客网 时间:2024/05/18 07:17
 在一个继承图里,每个名字用virtual刻画的基类,将总是用这个类的同一个对象表示。在另一方面,没有用virtual描述的每个基类都有定义自己的子对象去表示它

class B
class XX : B {}; //B是私有基类
struct YY : B {}; //B是公有基类

第一:private, public, protected 访问标号的访问范围。
private:只能由1.该类中的函数、2.其友元访问。
不能被任何其他访问,该类的对象也不能访问。

protected:可以被1.该类中的函数、友元 2.子类的函数、子类友元访问。
但不能被该类的对象访问。

public:可以被1.该类中的函数、友元 2.子类的函数、子类友元 3.该类的对象访问。
 
注:友元函数包括3种:设为友元的普通的非成员函数;设为友元的其他类的成员函数;设为友元类中的所有成员函数。

第二:类的继承后方法属性变化。
private 属性不能够被继承。
使用private继承,父类的protected和public属性在子类中变为private;
使用protected继承,父类的protected和public属性在子类中变为protected;
使用public继承,父类中的protected和public属性不发生改变;
 
如下所示: 
                            public:            protected:       private:
public继承             public             protected        不可用
protected继承       protected       protected        不可用
private继承           private            private            不可用

protected继承和private继承能降低访问权限。

class A
{
public:
    void fun(){cout <<"aa"<<endl;}
};
typedef void (A::* pf)(); //指向成员的指针
A aa;
pf pp = &A::fun;
(aa.*pp)();


静态成员不予任何对象相关联,因此指向静态成员的指针也就是一个常规指针,例如:
class Task
{
    static void schedule();
}
void (*p)() = &Task::schedule; //可以
void (Task::* pm)() = &Task::schedule; //错误

构造函数不能是虚函数

原创粉丝点击