zoukankan      html  css  js  c++  java
  • 在头文件中声明class 类 与 include类所在的头文件区别---理解

    在头文件中声明class 类 与 include类所在的头文件的理解:

    在头文件中,声明类

    它告诉编译器:存在这样的类。而实际的类则可以位于同一个编译单元中,也可以放在其他编译单元
    中。没有这个类原型,编译器将不会让我们编译通过。

    在头文件中引用 类所在的头文件,

    区别和结果:

    引用class声明和引用class头文件都可以编译通过!

    引用class声明显得简洁,一目了然,不用将其头文件都加载;

    但是在对应的实现的.cpp文件中,必须要引入class所在的头文件,因为这样在cpp文件中才能找到对应的class的具体实现地方;

    在头文件中引用class所在的头文件,就不必在对应的cpp文件中引用用到的类的头文件了。

    哪个方法更好?没有研究过,

    本人菜鸟一枚,以此记录一下,以便以后提醒自己。

    今天通过读书,看到这段话!

    提醒自己以后还是用前置声明的好!

    private:
    QLabel *label;
    QLineEdit *lineEdit;
    QCheckBox *caseCheckBox;
    QCheckBox *backwardCheckBox;
    QPustiButton *findButton;
    QPushButton *closeButton;


    对于这些私有变量,我们使用了它们的类前置这是可行的,因为它们都是指针(必须是类的指针才可以,如果是类的声明,那么会调用成员类的构造函数的,如果有参数,需要传入成员类的构造参数,没有参数,则调用构造函数),而且没
    有必要在头文件就去访问它们,因而编译程序就无须这些类的完整定义。我们没有包含与这几
    个类相关的头文件(如<QCheCkBÿX> 、<QLabel> ,等等),而是使用了一些前置声明,这可以使编译
    过程更快;

    在filedialog.h 文件中,本可以仅简单地添加一个<QtGui>包含即可,而不用包含<QDialog> 和
    使用QCheckBox、QLabel、QLineEdit和QPushButtion的前置声明。然而,在一个头文件中再包含一个
    那么大的头文件着实不是一种好的编程风格,尤其对于比较大的工程项目更是如此。

    关于私有变量是指向类的指针,还是类的声明,下面两端代码说明:

    #include "stdafx.h"
    #include <string.h>
    
    class A;
    //class B
    //{
    //public:
    //    B(){ printf("B constructor
    ");}
    //    A a;
    //};
    
    class D
    {
    public:
        D(){ printf("D constructor
    ");}
    };
    
    class C
    {
    public:
        C(){ printf("C constructor
    ");}
        A *a;
        D d;
    };
    
    class A
    {
    public:
        A(){ printf("A constructor
    ");}
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        //B b;
        C c;
        getchar();
        return 0;
    }

    一:B类运行错误,因为B类中含有类A,类A a,不是指向类的指针,需要找到A的具体实现,需要调用A的构造函数,即使在class B中前置声明类A,也是不可以的,

    前置声明,只是说明了这些类存在,而没有访问它们的完整定义;如果把class A定义放到B类定义之前,那么B类是可以编译通过的;

    二:A类虽然在C类之后定义,但是C类依旧运行成功,因为C类中声明的是指向类A的指针,并没有调用类A的构造函数;

    成员变量 类D,则调用了D的构造函数

    三:注意哦,如果有类成员变量(非指针),那么是先调用类成员变量的构造函数的,那么也就是如果类成员变量构造函数需要参数,那需要写在 类的初始化列表中

  • 相关阅读:
    CQUOJ 10819 MUH and House of Cards
    CQUOJ 9920 Ladder
    CQUOJ 9906 Little Girl and Maximum XOR
    CQUOJ 10672 Kolya and Tandem Repeat
    CQUOJ 9711 Primes on Interval
    指针试水
    Another test
    Test
    二分图匹配的重要概念以及匈牙利算法
    二分图最大匹配
  • 原文地址:https://www.cnblogs.com/XiHua/p/4749550.html
Copyright © 2011-2022 走看看