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

C++的类可以进行前向声明。但是,仅仅进行前向声明而没有定义的类是不完整的,这样的类,只能用于定义指针、引用、以及用于函数形参的指针和引用
而不能定义对象(因为此时编译器只知道这是个类,还不知道这个类的大小有多大),也不能访问类的对象,仍和形式的访问都允许(因为此时根本不知道有些什么成员)。等到类正式定义以后,就可以以各种方式使用该类了。

//前向声明此类
class Video;
//此时,只能定义指针和引用。不能定义对象,也不能以任何方式调用对象的成员
void fun1(Video* pv,Video& v1){}
//正式定义该类
class Video
{
public:
    void show();
};
//现在,这个类可以随便使用了,可以定义对象,访问成员
void fun2(Video* pv,Video& v1,Video v2){
    pv->show();
    v1.show();
    v2.show();
}
//类的实现,前面的只能让编译通过,实现类成员以后,连接也可以通过了。
void Video::show()
{
   cout<<"this is test"<

前向声明的作用是:

  • 不必在include头文件了,相对会省点编译时间。
  • 方便的解决两种类类型互相使用的问题。针对接口编程常常会遇到这种互相使用类型的场景。

在面试中遇到的题

题目的大意就是判断下面运行是否正确

class A;
class B{
    
public:
    B(){};
    ~B(){};
public:
    A a;    // 这里是错误的,使用了类的向前申明,只能定义引用跟指针,不能申明对象
    int b;
};

class A{
public:    
    A(){};
    ~A(){};
public:
    int a;
};

参考文章

你可能感兴趣的:(C++中类的前向声明的用法)