在头文件中声明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\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类所在的头文件区别---理解的更多相关文章
- 类A是公共的,应在名为A.java的文件中声明错误
第一种!!! “类A是公共的,应在名为A.java的文件中声明”这句话需要分两步来理解: 1.如果类A被声明为公共的(public),那么必须将类A保存在名为A.java的文件中: 2.反之,在一个文 ...
- Java入门-类HelloWorld是公共的,应在名为HelloWorld.java的文件中声明
开始学习java了,搭好环境,notepad++中新建一个java文件,新建一个HelloWorld类, public class HelloWorld { public static void ma ...
- 报错:①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窗口只有飘红 ...
- 多个".h"文件中声明及定义 全局变量和函数
一.".h"文件必须以如下格式书写 例:文件<CZ_efg_hi.h"> ------------文件内容----------- #ifndef CZ_Efg ...
- 一个.java文件中是否可以有多个类
前段时间,有个同事问到我这个问题:一个.java文件中是否可以有多个类? 答案:可以有多个类,但最多只能有一个被public修饰的class. 且若这个.java文件中有一个public类型的clas ...
- Shell 从日志文件中选择时间段内的日志输出到另一个文件
Shell 从日志文件中选择时间段内的日志输出到另一个文件 情况是这样的,某系统的日志全部写在一个日志文件内,所以这个文件非常大,非常长,每次查阅的时候非常的不方便.所以,相关人员希望能够查询某个时间 ...
- 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 ...
- 一个.java文件中可以有几个同级类
1.在一个.java文件中可以有几个类.修饰符只可以public abstract final和无修饰符,不能是其他的private等修饰符.2.public修饰的只能有一个,且要与文件名相同 若没有 ...
- Java将文件中的内容转换为sql语句(和并发定时读取文件)
数据文件内容data.txt {USER_TYPE=1,CREATE_USER=ZHANG,UPDATE_USER=li,OPER_NUM=D001,SRC=2,UPDATE_TIME=2018-11 ...
随机推荐
- Python3.x:常用基础语法
Python3.x:常用基础语法 1,if else语句: 不执行if内的语句,需要用:pass if i>2: #跳过不执行 pass else: print("i= %s" ...
- No module named _tkinter
https://www.douban.com/note/524197380/?type=like
- cogs 896. 圈奶牛
★★☆ 输入文件:fc.in 输出文件:fc.out 简单对比 时间限制:1 s 内存限制:128 MB 描述 农夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏.他建造的围栏必 ...
- Ansible Playbooks 常用模块
官网链接:https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html ansible python module ...
- JavaConfig 使用Java代码进行显示配置
从Spring 3起,JavaConfig功能已经包含在Spring核心模块,它允许开发者将bean定义和在Spring配置XML文件到Java类中. 需要先加载spring-context 包 &l ...
- Android 图形基础类Rect,扎实基础助腾飞
转载请注明出处:王亟亟的大牛之路 上周把"垃圾桶动画写完了",然后这礼拜寻思着学习点啥,脑子闷逼了大半天,然后就找了点基础源码读读,把看的经历分享给大家. 先安利:https:// ...
- JAVA多线程本质分析
多线程是Java开发中的重中之重,其重要性和难度,可见一斑.掌握并精通多线程开发,是每一个程序员的必修之课.哪怕中间的过程很痛苦,只要坚持了,并最终豁然开朗了,都是一种升华. 多线程的优化:合理利用C ...
- spark SQL学习(spark连接hive)
spark 读取hive中的数据 scala> import org.apache.spark.sql.hive.HiveContext import org.apache.spark.sql. ...
- [小问题笔记(三)] SVN树冲突(Tree Conflict),文件不能提交的解决办法
传说中SVN的树冲突是由不同开发者删除文件,移动文件神马的造成的. 我们遇到的情况是: 开发人员小B移动了项目中几个文件然后提交.开发人员小L更新项目至最新版本. 获取到移动后的文件则显示文件已被修改 ...
- 解决httpclient因为保持永久长连接造成连接吊死的问题
httpclient使用了连接池,如果没有设置keep-alive策略,PoolingHttpClientConnectionManager会默认使用永久连接. 最近在调用京东api时,发现一个请求开 ...