在头文件中声明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\n");}
// A a;
//}; class D
{
public:
D(){ printf("D constructor\n");}
}; class C
{
public:
C(){ printf("C constructor\n");}
A *a;
D d;
}; class A
{
public:
A(){ printf("A constructor\n");}
}; int _tmain(int argc, _TCHAR* argv[])
{
//B b;
C c;
getchar();
return ;
}

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

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

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

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

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

在头文件中声明class 类 与 include类所在的头文件区别---理解的更多相关文章

  1. 类A是公共的,应在名为A.java的文件中声明错误

    第一种!!! “类A是公共的,应在名为A.java的文件中声明”这句话需要分两步来理解: 1.如果类A被声明为公共的(public),那么必须将类A保存在名为A.java的文件中: 2.反之,在一个文 ...

  2. Java入门-类HelloWorld是公共的,应在名为HelloWorld.java的文件中声明

    开始学习java了,搭好环境,notepad++中新建一个java文件,新建一个HelloWorld类, public class HelloWorld { public static void ma ...

  3. 报错:①Tog goal specified requires a project to execute but there is no POM in this directory......②说类HelloWorld是公共的, 应在名为 HelloWorld.java 的文件中声明 public class HelloWorld......

    在运行Maven的命令时,在DOS窗口里面必须把目录切换到项目的根部,要不然命令是找不到目的地. 下图是错误示范,项目在Demo02这个目录里,就必须将目录切换到Demo02下,否则DOS窗口只有飘红 ...

  4. 多个".h"文件中声明及定义 全局变量和函数

    一.".h"文件必须以如下格式书写 例:文件<CZ_efg_hi.h"> ------------文件内容----------- #ifndef CZ_Efg ...

  5. 一个.java文件中是否可以有多个类

    前段时间,有个同事问到我这个问题:一个.java文件中是否可以有多个类? 答案:可以有多个类,但最多只能有一个被public修饰的class. 且若这个.java文件中有一个public类型的clas ...

  6. Shell 从日志文件中选择时间段内的日志输出到另一个文件

    Shell 从日志文件中选择时间段内的日志输出到另一个文件 情况是这样的,某系统的日志全部写在一个日志文件内,所以这个文件非常大,非常长,每次查阅的时候非常的不方便.所以,相关人员希望能够查询某个时间 ...

  7. java算法面试题:编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。

    package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...

  8. 一个.java文件中可以有几个同级类

    1.在一个.java文件中可以有几个类.修饰符只可以public abstract final和无修饰符,不能是其他的private等修饰符.2.public修饰的只能有一个,且要与文件名相同 若没有 ...

  9. Java将文件中的内容转换为sql语句(和并发定时读取文件)

    数据文件内容data.txt {USER_TYPE=1,CREATE_USER=ZHANG,UPDATE_USER=li,OPER_NUM=D001,SRC=2,UPDATE_TIME=2018-11 ...

随机推荐

  1. 20145307第十周JAVA学习报告

    教材学习内容总结 Java的网络编程 1.计算机网络概述 (1)路由器和交换机组成了核心的计算机网络,计算机只是这个网络上的节点以及控制等,通过光纤.网线等连接将设备连接起来,从而形成了一张巨大的计算 ...

  2. zabbix3.2通过snmp v2采集Dell服务器iDRAC口信息监控硬件

    模板下载 https://files.cnblogs.com/files/LuckWJL/zbx_export_templates.xml 模板源代码 <?xml version="1 ...

  3. git-修改远程的URL

    git remote set-url命令修改remote URL git remote set-url传递两个参数 remote name.例如,origin或者upstream new remote ...

  4. [CF911F]Tree Destruction

    题意翻译 给你一棵树,每次挑选这棵树的两个叶子,加上他们之间的边数(距离),然后将其中一个点去掉,问你边数(距离)之和最大可以是多少. 首先我们知道,到一个点距离最远的点是直径的端点.考虑贪心,如果我 ...

  5. HDU 5773 The All-purpose Zero(O(nlgn)求LIS)

    http://acm.hdu.edu.cn/showproblem.php?pid=5773 题意: 求LIS,其中的0可以看做任何数. 思路: 因为0可以看做任何数,所以我们可以先不管0,先求一遍L ...

  6. Berkeley parser使用方法

    1. 简介  Berkeley Parser 是加州大学伯克利分校 NLP 实验室开发的一种基于概率上下文无关文法(PCFG)的成分句法分析器,支持英语,汉语,德语等多个语种,它具有较高的句法分析性能 ...

  7. nginx 开启rewrite thinkcmf

    server{ ... 省略 location / { index index.php index.html index.htm; #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则 if ...

  8. 拉取代码过程中遇到的:post install error,please remove node_modules before retry!

    这是在git → clone 之后,安装npm intall时出现的错误,完整错误提示如下: 解决: // 1.先删除node_modules这个文件 $ rm -rf node_modules/ / ...

  9. LeetCode第[79]题(Java):Word Search(矩阵单词搜索)

    题目:矩阵单词搜索 难度:Medium 题目内容: Given a 2D board and a word, find if the word exists in the grid. The word ...

  10. 在Web API 2 中实现带JSON的Patch请求

    译文:http://www.cnblogs.com/kexxxfeng/p/the-patch-verb-in-web-api-2-with-json.html 原文:https://carly.io ...