C++中前置声明介绍】的更多相关文章

前置声明是指对类.函数.模板或者结构体进行声明,仅仅是声明,不包含相关具体的定义.在很多场合我们可以用前置声明来代替#include语句. 类的前置声明只是告诉编译器这是一个类型,但无法告知类型的大小,成员等具体内容.在未提供完整的类之前,不能定义该类的对象,也不能在内联成员函数中使用该类的对象.而头文件则一一告之. 如:class Screen; 前置声明,也称前向声明(forward declaration).在声明之后,定义之前,类Screen是个不完整类型(incomplete type…
前置声明的使用 有一定C++开发经验的朋友可能会遇到这样的场景:两个类A与B是强耦合关系,类A要引用B的对象,类B也要引用类A的对象.好的,不难,我的第一直觉让我写出这样的代码: // A.h #include "B.h" class A { B b; public: A(void); virtual ~A(void); }; //A.cpp #include "A.h" A::A(void) { } A::~A(void) { } // B.h #include…
前言 本文总结了c++中前置声明的写法及注意事项,列举了哪些情况可以用前置声明来降低编译依赖. 前置声明的概念 前置声明:(forward declaration), 跟普通的声明一样,就是个声明, 没有定义.之所以叫前置声明,看下面一小段代码: class Useful; // 对Userful类的前置声明 class Boss { Useful *userful_; // 实际要用到它的地方 }; 因为是在使用这个类型Userful之前告诉编译器,“哎,小编,Userful是个类,我要用它,…
一.类嵌套的疑问 C++头文件重复包含实在是一个令人头痛的问题,前一段时间在做一个简单的数据结构演示程序的时候,不只一次的遇到这种问题.假设我们有两个类A和B,分别定义在各自的有文件A.h和B.h中,但是在A中要用到B,B中也要用到A,但是这样的写法当然是错误的: class B; class A { public: B b; }; class B { public: A a; }; 因为在A对象中要开辟一块属于B的空间,而B中又有A的空间,是一个逻辑错误,无法实现的.在这里我们只需要把其中的一…
实验于华中农业大学逸夫楼2017.3.10 在编写C++程序的时候,偶尔需要用到前置声明(Forward declaration).下面的程序中,带注释的那行就是类B的前置说明.这是必须的,因为类A中用到了类B,而类B的声明出现在类A的后面.如果没有类B的前置说明,下面的程序将不同通过编译,编译器将会给出类似"缺少类型说明符"这样的出错提示. 代码一: // ForwardDeclaration.h #include <iostream> using namespace s…
引用google c++编码规范: When you include a header file you introduce a dependency that will cause your code to be recompiled wheneverthe header file changes. If your header file includes other header files, any change to those files will cause any codethat…
SystemVerilog中,为了是代码简洁.易记,允许用户根据个人需要使用typedef自定义数据类型名,常用的使用方法可参见"define和typedef区别".但是在SystemVerilog引入面向对象编程后,经常会遇到在编写某个类或者类型的定义之前需要先使用对变量进行声明,往往这种情况下编译都会报错,为此本文示例typedef的另外一种用法,可以称之为"forward typedef". [示例]未使用forward typedef [仿真结果] 示例中,…
http://www.2cto.com/kf/201311/260705.html    今天在研究C++”接口与实现分离“的时候遇到了一个问题,看似很小,然后背后的东西确值得让人深思!感觉在学习的过程中有太多的为什么,而每一个为什么背后都隐藏着一些原理和目的,所以得多问自己”为什么“,这样才不仅知其然,更知其所以然,才能举一反三.融会贯通,这也是我以前学习不够重视的一个问题,好在”亡羊补牢,犹未晚也!“.         C++中将”接口与实现分离“的两个重要目的就是”降低文件间的编译依存关系…
假设有一个Date类 Date.h class Date { private: int year, month, day; }; 如果有个Task类的定义要用到Date类,有两种写法 其一 Task1.h class Date; class Task1 { public: Date getData(); }; 其二 Task2.h #include "Date.h" class Task2 { public: Date getData(); }; 一个采用前置声明,一个采用#inclu…
为什么要有前置声明? eg: -定义一个类 class A,这个类里面使用了类B的对象b,然后定义了一个类B,里面也包含了一个类A的对象a,就成了这样: //a.h #include "b.h" class A { .... private: B b; }; //b.h #include "a.h" class B { .... private: A a; }; 一编译,就出现了一个相互包含的问题了,解决的方法是在a.h文件中声明类B,然后使用B的指针. //a.h…