全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++ 前置声明详解及实例

C++ 前置声明详解及实例

【1】一般的前置函数声明

见过最多的前置函数声明,基本格式代码如下:

#include <iostream>
using namespace std;

void fun(char ch, int *pValue, double dValue);

void main()
{
  int nValue = 100;
  double dValue = 111.22;
  fun('a', &nValue, dValue);

  system("pause");
}

void fun(char ch, int *pValue, double dValue)
{
  return;
}

很好理解,不做赘述。

【2】自定义类型的前置声明

自定义类型的前置声明,由于编译器不知道类型的大小,所以不可以声明类型的对象。只可以利用类型声明指针和引用。

代码如下:

/*
 * 自定义类型前置声明
 */
#include <iostream>
using namespace std;

class B;

class A 
{
private:
  // 内置类型
  int m_nInt;
  int& m_nRInt;
  int* m_pInt;

  // 自定义类型
//  B b; // error!
  B* m_pB;
  B& m_b;

public: 
  A (B *pBPara = NULL) : m_nInt(100)
    , m_nRInt(m_nInt)
    , m_pInt(NULL)
    , m_pB(NULL)
    , m_b((NULL == pBPara) ? (*m_pB) : (*pBPara))
  {
    cout << "A()" << endl;
  }
  ~A()
  {
    cout << "~A()" << endl;
  }

  void funA()
  {
//    m_pB->doAnything(); // build error C2027: use of undefined type 'B'
  }
};

class B
{
private:
  int m_n;

public: 
  B (int n = 100) : m_n(n)
  {
    cout << "B()" << endl;
  }
  ~B()
  {
    cout << "~B()" << endl;
  }
  void doAnything()
  {
    cout << "B::anythig()" << endl;
  }
};

void main()
{
  A objA;
  system("pause");
}

如上,利用前置类型的指针想调用其成员函数,会报编译错误!那么,肿么办?请看下文。

【3】声明和实现分离

代码如下,声明头文件:

/*
 * TestForwardDeclar.h
 */
#ifndef D_TESTFORWARDDECLAR_H_
#define D_TESTFORWARDDECLAR_H_

#include <iostream>

class B; // 前置声明自定义类型

class A 
{
private:
  // 内置类型
  int m_nInt;
  int& m_nRInt;
  int* m_pInt;

  // 自定义类型
//  B b; // error!
  B* m_pB;
  B& m_b;

public: 
  A (B *pBPara = NULL);
  ~A ();
  void funA();
};

class B
{
private:
  int m_n;

public: 
  B (int n = 100);
  ~B ();
  void doAnything();
};

#endif

代码如下,定义文件:

/*
 * TestForwardDeclar.cpp
 */

#include "TestForwardDeclar.h"
#include <iostream>

A::A (B *pBPara) 
  : m_nInt(100)
  , m_nRInt(m_nInt)
  , m_pInt(NULL)
  , m_pB(NULL)
  , m_b((NULL == pBPara) ? (*m_pB) : (*pBPara))
{
  std::cout << "A()" << std::endl;
}

A::~A()
{
  std::cout << "~A()" << std::endl;
}

void A::funA()
{
  m_pB->doAnything(); // 分开头文件和实现文件即可
}


B::B (int n) : m_n(n)
{
  std::cout << "B()" << std::endl;
}

B::~B()
{
  std::cout << "~B()" << std::endl;
}

void B::doAnything()
{
  std::cout << "B::anythig()" << std::endl;
}

代码如下:测试文件:

#include "TestForwardDeclar.h"
 
 void main()
 {
  A objA;
}

编译成功,运行结果是期望效果。

【4】总结

自定义类型前置声明时,只可以利用类型名声明指针和引用变量(谨记不可以声明对象或new 对象,均因为类型大小不确定,编译器无能为力)。

若需要利用指针或引用调用前置类型的接口,必须按照声明和实现分离的方式进行编码。

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C++前置声明  # 详解C++前置声明  # 基于C++全局变量的声明与定义的详解  # 深入分析C++中声明与定义的区别  # C++中的extern声明变量详解  # 讲解C++中的枚举类型以及声明新类型的方法  # 详解C++编程中的嵌套类的声明与其中的函数使用  # C++编程中指针的声明与基本使用讲解  # c/c++中变量的声明和定义深入解析  # 详解C++ 前置声明  # C++中显示声明与隐式声明的使用与区别小结  # 自定义  # 会报  # 可以利用  # 头文件  # 很好  # 最多  # 见过  # 不可以  # 希望能  # 不做  # 不确定  # 谢谢大家  # 记不  # 无能为力  # 或引用  # 若需  # 结果是  # double  # dValue  # main 


相关文章: 小说建站VPS选用指南:性能对比、配置优化与建站方案解析  免费视频制作网站,更新又快又好的免费电影网站?  网站制作难吗安全吗,做一个网站需要多久时间?  建站主机是什么?如何选择适合的建站主机?  如何快速建站并高效导出源代码?  如何快速选择适合个人网站的云服务器配置?  内部网站制作流程,如何建立公司内部网站?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  建站之星在线版空间:自助建站+智能模板一键生成方案  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  nginx修改上传文件大小限制的方法  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  如何在景安服务器上快速搭建个人网站?  想学网站制作怎么学,建立一个网站要花费多少?  黑客如何通过漏洞一步步攻陷网站服务器?  如何获取免费开源的自助建站系统源码?  股票网站制作软件,网上股票怎么开户?  建站主机与虚拟主机有何区别?如何选择最优方案?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  专业公司网站制作公司,用什么语言做企业网站比较好?  如何在Windows虚拟主机上快速搭建网站?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  如何用PHP快速搭建CMS系统?  如何用花生壳三步快速搭建专属网站?  广州美橙建站如何快速搭建多端合一网站?  建站主机服务器选型指南与性能优化方案解析  如何用搬瓦工VPS快速搭建个人网站?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  如何快速生成可下载的建站源码工具?  建站之星下载版如何获取与安装?  如何设计高效校园网站?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  在线制作视频的网站有哪些,电脑如何制作视频短片?  如何在云服务器上快速搭建个人网站?  C++中引用和指针有什么区别?(代码说明)  建站之星价格显示格式升级,你的预算足够吗?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  黑客如何利用漏洞与弱口令入侵网站服务器?  Android自定义listview布局实现上拉加载下拉刷新功能  建站主机选虚拟主机还是云服务器更好?  已有域名如何快速搭建专属网站?  建站之星后台密码遗忘如何找回?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  如何选择高效稳定的ISP建站解决方案?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  建站为何优先选择香港服务器? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。