亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++ 前置聲明詳解及實(shí)例

 更新時(shí)間:2017年06月05日 08:47:51   作者:kaizen  
這篇文章主要介紹了C++ 前置聲明詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下

C++ 前置聲明詳解及實(shí)例

【1】一般的前置函數(shù)聲明

見過最多的前置函數(shù)聲明,基本格式代碼如下:

#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:
  // 內(nèi)置類型
  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");
}

如上,利用前置類型的指針想調(diào)用其成員函數(shù),會報(bào)編譯錯(cuò)誤!那么,腫么辦?請看下文。

【3】聲明和實(shí)現(xiàn)分離

代碼如下,聲明頭文件:

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

#include <iostream>

class B; // 前置聲明自定義類型

class A 
{
private:
  // 內(nèi)置類型
  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(); // 分開頭文件和實(shí)現(xiàn)文件即可
}


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;
}

編譯成功,運(yùn)行結(jié)果是期望效果。

【4】總結(jié)

自定義類型前置聲明時(shí),只可以利用類型名聲明指針和引用變量(謹(jǐn)記不可以聲明對象或new 對象,均因?yàn)轭愋痛笮〔淮_定,編譯器無能為力)。

若需要利用指針或引用調(diào)用前置類型的接口,必須按照聲明和實(shí)現(xiàn)分離的方式進(jìn)行編碼。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • C語言代碼實(shí)現(xiàn)推箱子小游戲

    C語言代碼實(shí)現(xiàn)推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言代碼實(shí)現(xiàn)推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語言實(shí)現(xiàn)enum枚舉

    C語言實(shí)現(xiàn)enum枚舉

    在實(shí)際編程中,有些數(shù)據(jù)的取值往往是有限的,只能是非常少量的整數(shù),并且最好為每個(gè)值都取一個(gè)名字,以方便在后續(xù)代碼中使用,比如一個(gè)星期只有七天,一年只有十二個(gè)月,一個(gè)班每周有六門課程等。 以每周七天為例,我們可以使用#define命令來給每天指定一個(gè)名字
    2021-06-06
  • dev-c++創(chuàng)建lib(靜態(tài)鏈接庫)文件的實(shí)現(xiàn)步驟

    dev-c++創(chuàng)建lib(靜態(tài)鏈接庫)文件的實(shí)現(xiàn)步驟

    本文主要介紹了dev-c++創(chuàng)建lib(靜態(tài)鏈接庫)文件的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C++實(shí)現(xiàn)LeetCode(67.二進(jìn)制數(shù)相加)

    C++實(shí)現(xiàn)LeetCode(67.二進(jìn)制數(shù)相加)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(67.二進(jìn)制數(shù)相加),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • c++使用正則表達(dá)式提取關(guān)鍵字的方法

    c++使用正則表達(dá)式提取關(guān)鍵字的方法

    這篇文章給大家介紹了c++使用正則表達(dá)式提取關(guān)鍵字的方法,相對來說比較簡單,同時(shí)給大家提到了c++通過正則表達(dá)式提取匹配到的字符串的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-08-08
  • Qt實(shí)現(xiàn)解壓帶有密碼的加密文件

    Qt實(shí)現(xiàn)解壓帶有密碼的加密文件

    Quazip是Qt平臺下面的一個(gè)壓縮解壓縮庫。本文將利用Quazip實(shí)現(xiàn)解壓帶有密碼的加密文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-02-02
  • 探究一下C語言生成隨機(jī)數(shù)的奧秘

    探究一下C語言生成隨機(jī)數(shù)的奧秘

    C語言中生成隨機(jī)數(shù)是一項(xiàng)非常重要的功能,因?yàn)樵S多現(xiàn)代應(yīng)用程序需要使用隨機(jī)數(shù)。本文就來帶大家一起探究一下C語言生成隨機(jī)數(shù)的奧秘吧
    2023-03-03
  • C++中的對象指針總結(jié)

    C++中的對象指針總結(jié)

    以下是對C++中的對象指針進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C++ boost::asio編程-異步TCP詳解及實(shí)例代碼

    C++ boost::asio編程-異步TCP詳解及實(shí)例代碼

    這篇文章主要介紹了C++ boost::asio編程-異步TCP詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • 詳解C++編程中類的聲明和對象成員的引用

    詳解C++編程中類的聲明和對象成員的引用

    這篇文章主要介紹了詳解C++編程中類的聲明和對象成員的引用,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09

最新評論