zoukankan      html  css  js  c++  java
  • C++12.1.4 类的前向声明、不完全类型类

    • 只声明却没有定义的类称为—————–不完全类型,不完全类型不能定义该类型的对象,只能用于定义指向该类型的指针及引用,或者用于声明(不是定义)使用该类型作为形参类型或返回类型的函数。

    • 在创建类的对象之前,必须完整地定义该类。必须定义,而不是声明类,这样,编译器就会给类的对象预定相应的存储空间。同样的,在使用引用或指针访问类的成员之前,必须已经定义类。

    -可以声明一个类而不定义它:这个声明称为——前向声明,在声明之后,定义之前,类称为——不完全类型,即已知Screen类是一个类型,但不知道包含哪些成员。

    class Screen;
    • 只声明却没有定义的类称为不完全类型,不完全类型不能定义该类型的对象,只能用于定义指向该类型的指针及引用,或者用于声明(不是定义)使用该类型作为形参类型或返回类型的函数。

    • 在创建类的对象之前,必须完整地定义该类。必须定义,而不是声明类,这样,编译器就会给类的对象预定相应的存储空间。同样的,在使用引用或指针访问类的成员之前,必须已经定义类。

    • 只有当类定义已经在前面出现过,数据成员才能被制定为该类类型。如果该类型是不完全类型,那么数据成员只能是指向该类类型的指针或引用。

    • 因为只有当类定义体完成后才能定义类,因此类不能具有自身类型的数据成员,然而,只要类名一出现就可以认为该类已经声明,因此,类的数据成员可以是指向自身类型的指针或引用:

    class LinkScreen{
        Screen window;
        LinkScreen *next;
        LinkScreen *prev;
    };
    • static数据成员也可以是该成员所属的类类型。非static成员被限定声明为其自身类对象的指针或引用: 
      《12.6 static类成员》
    class Bar{
    public:
    private:
       static Bar mem1;//ok
       Bar *mem2;//ok
       Bar mem3;//no!!!!因为Bar是一个不完全类型,所以只能定义它的非static的指针或引用。
    };

    类的前向声明一般用来编写相互依赖的类。13.4

  • 相关阅读:
    c#和unity引擎的所有笔记
    C#笔记(十九)——委托和事件
    委托
    c#笔记(十七)——队列
    js正则表达式
    mysql分页
    springMVC
    hibernate与spring整合实现transaction
    spring aop
    about hibernate lazy load and solution
  • 原文地址:https://www.cnblogs.com/feng9exe/p/8671738.html
Copyright © 2011-2022 走看看