C++中类的前向声明】的更多相关文章

原创文章,未经博主允许禁止转载. C++的类可以进行前向声明.但是,仅仅进行前向声明而没有定义的类是不完整的,这样的类,只能用于定义指针.引用.以及用于函数形参的指针和引用.而不能定义对象(因为此时编译器只知道这是个类,还不知道这个类的大小有多大),也不能访问类的对象,仍和形式的访问都允许(因为此时根本不知道有些什么成员).等到类正式定义以后,就可以以各种方式使用该类了. //前向声明此类 class Video; //此时,只能定义指针和引用.不能定义对象,也不能以任何方式调用对象的成员 vo…
概念 可以声明一个类而不是定义它; class Screen; 这个声明被称为"前向声明".在声明之后,定义之前,类screen是一个不完全类型,即已知Screen是一个类型,但不知道包含哪些成员. 不完全类型不能定义该类型的对象,只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数. 因为只有当类定义体完成后才能定义类,因此类不能具有自身类型的数据成员,然而,只要类名一出现就可以认为该类已经声明,因此,类的数据成员可以是指向自身类型的指…
一.类声明 //类是一种用户自定义类型,声明形式: class 类名称 {    public:              公有成员(外部接口)    private:              私有成员    protected:              保护成员 }; 在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数. 在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问. 在关键字protected后面声明,与p…
typedef struct tag_guid { ULONGLONG utime; ULONGLONG umac; }tpguid; class A { private: int m_teset1; }; //其他文件中的前向声明,注意结构体和类的区别 typedef struct tag_guid tpguid; class A; //使用,注意使用前向声明的成员必须是指针 class B { private: tpguid* m_guid; A* m_a; }; 转:http://blog…
前向声明 在计算机程序设计中, 前向声明是指声明标识符(表示编程的实体,如数据类型.变量.函数)时还没有给出完整的定义.即可以声明一个类而不定义它,只声明类但不知道类的成员变量.函数等具体细节. 如: class B; class A { private: int id; ...... public: bool test(int id, B* b); }; 这里的class B只有声明没有定义,是一个不完全类型(incomplete type).它的作用比较有限,不能定义类B的对象,但是可以定义…
整理于: http://blog.csdn.net/heyutao007/article/details/6649741 http://blog.sina.com.cn/s/blog_68d90fdb0100yapr.html 1. 前向声明好处 1)不必要的#include   会增加编译时间. 2)混乱随意的#include可能导致循环#include,可能出现编译错误. 2. 定义 可以声明一个类而不定义它.这个声明,有时候被称为前向声明(forward declaration).比如cl…
只声明却没有定义的类称为—————–不完全类型,不完全类型不能定义该类型的对象,只能用于定义指向该类型的指针及引用,或者用于声明(不是定义)使用该类型作为形参类型或返回类型的函数. 在创建类的对象之前,必须完整地定义该类.必须定义,而不是声明类,这样,编译器就会给类的对象预定相应的存储空间.同样的,在使用引用或指针访问类的成员之前,必须已经定义类. -可以声明一个类而不定义它:这个声明称为——前向声明,在声明之后,定义之前,类称为——不完全类型,即已知Screen类是一个类型,但不知道包含哪些成…
本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前向声明 编程定律 先强调一点:在一切可能的场景,尽可能地使用前向声明(Forward Declaration).这符合信息隐蔽的原则. 一个例子 regmap 那么前向声明究竟是个什么鬼?在内核写代码和看代码的童鞋,经常发现Linux内核里面充斥着这样的代码,比如 include/vim linux/regulator/driver.h…
我们知道C++的类应当是先定义,然后使用.但在处理相对复杂的问题.考虑类的组合时,很可能遇到俩个类相互引用的情况,这种情况称为循环依赖. 例如: class A { public: void f(B b);//以B类对象b为形参的成员函数 //这里编译错位,因为'B'为为止符号 }; class B { public: void g(A a); }; 这里类A的公有成员函数f的形参是类B的对象,同时类B的公有成员函数g也以类A的对象为形参.由于在使用一个类之前,必须首先定义该类,因此无论将哪一个…
C++中的类应当是先定义,然后使用.但在处理相对复杂的问题,比如考虑类的组合时,有可能遇到两个类相互引用的情况,这种情况称为循环依赖. 考虑下面代码: class A { public: void f(B b);//以B类对象b为形参的成员函数 //这里编译错位,因为'B'为为止符号 }; class B { public: void g(A a); }; 这里类A的公有成员函数f的形参是类B的对象,同时类B的公有成员函数g也以类A的对象为形参.由于在使用一个类之前,必须首先定义该类,因此无论将…