前向声明

前向声明的定义:有些时候我们可以声明一些类但是并不去定义它,当然这个类的作用也很有限了。

如:class A;

声明一个foo类,这个声明,有时候也叫做前向声明(forward declaration),在声明完这个foo类之后,定义完这个foo类之前的时期,foo类是一个不完全的类型(incomplete type),

也就是说foo类是一个类型,但是这个类型的一些性质(比如包含哪些成员,具有哪些操作)都不知道。

因此这个类的作用也很有限.

(1)不能定义foo类的对象。(不能)

(2)可以用于定义指向这个类型的指针或引用。(很有价值的东西)(能) ----- 因为所有类型的引用和指针都是4字节,嘻嘻。

(3)用于声明(不是定义)使用该类型作为形参或者返回类型的函数。(能)

如:

class string;

class Sample

{

private:

string &s;

};

这里只需要做一个string的前向声明就可以了,不需要#include <string>

这里,我根本没有定义一个foo类,但是还是可以这样用,因为成员函数不占类对象的大小,所以c++编译器还是可以确定对象的大小。

前向声明的作用在于告诉编译器这个是一个在别的地方定义的类型。这样C++编译器就能生成正确的符号表了。编译器只知道这是一个类?一个结构体?

但是在类实现文件还是要 include 声明这个类的头文件的

时间: 2024-08-03 00:55:23

前向声明的相关文章

C++中类的前向声明的用法

原创文章,未经博主允许禁止转载. C++的类可以进行前向声明.但是,仅仅进行前向声明而没有定义的类是不完整的,这样的类,只能用于定义指针.引用.以及用于函数形参的指针和引用.而不能定义对象(因为此时编译器只知道这是个类,还不知道这个类的大小有多大),也不能访问类的对象,仍和形式的访问都允许(因为此时根本不知道有些什么成员).等到类正式定义以后,就可以以各种方式使用该类了. //前向声明此类 class Video; //此时,只能定义指针和引用.不能定义对象,也不能以任何方式调用对象的成员 vo

C++类的前向声明

前向声明的定义:有些时候我们可以声明一些类但是并不去定义它,当然这个类的作用也很有限了. 比如class foo; 声明一个foo类,这个声明,有时候也叫做前向声明(forward declaration),在声明完这个foo类之后,定义完这个foo类之前的时期,foo类是一个不完全的类型(incomplete type),也就是说foo类是一个类型,但是这个类型的一些性质(比如包含哪些成员,具有哪些操作)都不知道. 因此这个类的作用也很有限. (1)不能定义foo类的对象. (2)可以用于定义

函数与前向声明

代码: #include <stdio.h> #include <stdlib.h> // 标准C风格使用前向声明(forward declaration) // 函数funcA使用前向声明 // 函数funcB未使用前向声明 // 声明函数 void funcA(void); // 声明并定义函数 void funcB(void) { // ... } int main(void) { // 调用函数 funcA(); funcB(); return EXIT_SUCCESS;

C语言不进行类型检查 和函数可以不进行前向声明

编译器为gcc4.5 #include <stdio.h> int main() { printf("%d\n",add(3)); printf("%d\n",add('c')); printf("%d\n",add(3.2)); return 0; } int add(int a) { return a; } C 语言可以不进行前向声明,前提是定义的函数必须是 int型返回值和int型的形参. C语言不进行类型检查 和函数可以不进行

类的前向声明

前向声明的定义:有些时候我们可以声明一些类但是并不去定义它,当然这个类的作用也很有限了. 比如class foo; 声明一个foo类,这个声明,有时候也叫做前向声明(forward declaration),在声明完这个foo类之后,定义完这个foo类之前的时期,foo类是一个不完全的类型(incomplete type),也就是说foo类是一个类型,但是这个类型的一些性质(比如包含哪些成员,具有哪些操作)都不知道. 因此这个类的作用也很有限. (1)不能定义foo类的对象. (2)可以用于定义

c/c++基础(二十) 类的前向声明和#include区别

在头文件中引入另一个类经常有两种写法: (1)class Name; (2)#include "Name.h" 它们的区别是什么呢? 第一种叫做前向声明,在程序中引入了类类型为Name.在声明之后,定义之前,类Name是一个不完全类型(incompete type),即已知Name是一个类型,但不知道包含哪些成员.不完全类型只能以有限方式使用,不能定义该类型的对象,不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数.(前向声明

两个类相互包含引用的问题--类前向声明

1.背景 编程中遇到如下错误:使用不完全类型**以及**前向声明. 查找相关资料后发现是类的前向声明(forward declaration)问题:在程序中声明一个类后,此类是一个不完全类型(incompete type),即已知此类是一个类型,但不知道包含哪些成员. 不完全类型只能以有限方式使用,不能定义该类型的对象.不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数. 2.为什么需要前向声明 在构造自己的类时,有可能会碰到两个类之间

C++ 类的前向声明的用法

我们知道C++的类应当是先定义,然后使用.但在处理相对复杂的问题.考虑类的组合时,很可能遇到俩个类相互引用的情况,这种情况称为循环依赖. 例如: class A { public: void f(B b);//以B类对象b为形参的成员函数 //这里编译错位,因为'B'为为止符号 }; class B { public: void g(A a); }; 这里类A的公有成员函数f的形参是类B的对象,同时类B的公有成员函数g也以类A的对象为形参.由于在使用一个类之前,必须首先定义该类,因此无论将哪一个

关于声明、定义、前向声明、include、循环依赖、普通友元函数、友元类、友元成员函数的总结

做<C++ Primer>(第5版)253页练习题7.3.4有感,故总结之 1 声明 1.1 变量和函数的声明 常见的声明是声明一个变量或函数,一般在头文件.h中声明,例如: pos cursor = 0; // 给定初始值 char get(pos r, pos col) const; 1.2 类的声明 对于一个类,一般是直接在头文件中直接写 class ClassName { ... },这称之为类的定义,然后在类体{...}中又声明或定义了成员变量和成员函数.类的声明是没有类体,只有个类