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的构造函数

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

  • 相关阅读:
    C#之纯数字判断
    C#之仿魔兽登录
    jQuery考试之错题分析
    初学jQuery之jQuery虚假购物车-------与真实数据无关
    Jquery中绑定事件的异同
    总结java基础
    初学jQuery之jQuery事件与动画
    初学jQuery之jQuery选择器
    JavaScript 实现复制到剪贴板的总结
    IE和其他浏览器的表现差异:盒子间的空隙,图片变形,justify-content无效
  • 原文地址:https://www.cnblogs.com/XiHua/p/4749550.html
Copyright © 2011-2022 走看看