C++ 類宣告 類前置宣告
參考自:https://www.cnblogs.com/fwycmengsoft/p/4061989.html
關於前置型別宣告的注意點:
程式碼一:
class B;
class A
{
public:
B* aData;
A(B* b) :aData(b) {}
};
class B {};
上述程式碼能夠通過編譯。
程式碼二:
class B;
class A
{
public:
B aData;
A(B b) :aData(b) {}
};
class B {};
上述程式碼報錯。Error List:
C2079 'A::aData' uses undefined class 'B'
C2027 use of undefined type 'B'
C2439 ‘A::aData': member could not be initialized
問題總結:上述兩段程式碼中僅僅相關了一個指標,而編譯結果不同。
結論:前置型別宣告只能作為指標或者引用,不能定義類的物件,所以也不能呼叫物件中的方法(包括建構函式)。
相關推薦
C++友元類使用之前置宣告(定義變數)
今天專案使用到了友元類,於是便先試著搞個簡單地使用例子 #include<iostream> class b; class a { private:int value; protected:void funprotected(); public:friend b
C++類的前置宣告(二)
看完《Effective C++》條款31有感。。 假設有一個Date類 Date.h [cpp] view plain copy class Date { private: int year, month, day; }; 如果有個Task類的
C++裡類的前置宣告初探
我們先了解下C++下函式的情況,然後再類比到C++類 一 C++下函式宣告和定義 我們在用C++寫程式碼時(假設原始檔只有一個main.cpp),經常會按照以下步驟寫: 先對自定義的函式進行宣告 在main函式裡呼叫第1步裡宣告好的函式 編寫函式的實際程式碼,
【C/C++開發】C++之enum列舉量宣告、定義、使用與列舉類詳解與列舉類前置型別宣告
前面講到可以通過強制轉換將其他型別值賦給列舉變數:Weekday = enumType(2);這是合法的;但是Weekday = enumType(20);是非法的。這裡涉及列舉取值範圍的概念:列舉的上限是 大於最大列舉量的 最小的2的冪,減去1; 列舉的下限有兩種情況:一、列舉量的最小值不小於0,則列
C++ 類宣告 類前置宣告
參考自:https://www.cnblogs.com/fwycmengsoft/p/4061989.html 關於前置型別宣告的注意點: 程式碼一: class B; class A { public:B* aData;A(B* b) :aData(b) {} }; c
C++模板類的前置宣告
template<typename T> class LinkedStack;template<typename T>class Node{friend class LinkedStack<T>;private: T data; Node&
C++ 類靜態成員變數宣告和定義
C++悠悠然 君不見黃河之水天上來,東流到海不復回 //1)在靜態記憶體區中 //2)所有類物件共用這一個變數,只有唯一一個 //3)必須在類外面顯示定義,顯示定義的時候不加static //4)可以通過類物件訪問,也可以通過類名加作用域訪問 #includ
詳解C++程式設計中類的宣告和物件成員的引用
C++類的宣告和物件的建立 類是建立物件的模板,一個類可以建立多個物件,每個物件都是類型別的一個變數;建立物件的過程也叫類的例項化。每個物件都是類的一個具體例項(Instance),擁有類的成員變數和成員函式。 與結構體一樣,類只是一種複雜資料型別的宣告,不佔用記憶體空間。而物件是類這種資料型別的一個變
C++類的定義和宣告
C++語言可以看成是C語言的擴充套件和改進,相對於C語言,C++語言主要是增添了面向物件的特性。類(Class)則是C++面向物件程式設計的實現方式。 無論是何種程式語言,進行面向物件程式設計都將是從類的設計開始的。什麼是類呢?其實很簡單,我們可以理解為一種使用者自定義的資
待補遺(6)[C++]兩個類如何通過友元宣告互相訪問對方的非公有成員
1.設有類A,和類B兩個類,假定類A的宣告在類B之前(類的宣告總會有先後之分) 2.類A與類B,各自具有一個private許可權的func函式。 一、類A,類B的宣告如下(定義在在同一個原始檔中): #include <iostream> class A{
模板類的前置宣告
template<class T> class Array; template<class T> class Pointer; template<class T> class Array_data { friend class A
c++友元類宣告及其呼叫
友元類 友元除了前面講過的函式以外,友元還可以是類,即一個類可以作另一個類的友元。當一個類作為另一個類的友元時,這就意味著這個類的所有成員函式都是另一個類的友元函式。 使用友元類時注意: (1) 友元關係不能被繼承。 (2) 友元關係是單向的,不具有交換性。若類B
(轉載)(C++)淺談多型基類解構函式宣告為虛擬函式
主要內容: 1、C++類繼承中的建構函式和解構函式 2、C++多型性中的靜態繫結和動態繫結 3、C++多型性中解構函式宣告為虛擬函式 1、C++類繼承中的建構函式和解構函式 在C++的類繼承中, 建立物件時,首先呼叫基類的建構函式,然後在呼叫下一
(C++)淺談多型基類解構函式宣告為虛擬函式
主要內容: 1、C++類繼承中的建構函式和解構函式 2、C++多型性中的靜態繫結和動態繫結 3、C++多型性中解構函式宣告為虛擬函式 1、C++類繼承中的建構函式和解構函式 在C++的類繼承中, 建立物件時,首先呼叫基類的建構函式,然後在呼叫下一個派生類的建構函式,依次類推; 析構物件時,其
C++中,類和函式分開定義宣告和實現的方法
test.hpp #include <map> #include <queue> #include <string> #include <vector&g
C++---如何在類中宣告一個常量?
需求:有時候需要在類定義中宣告一個常量,怎麼宣告呢? 常見錯誤用法: class Student {。。。 const int Len=10; char name[Len]; //錯誤
C++類模板友元宣告的幾種情況
根據《C++ Primer》第三版16.4節的敘述,C++類模板友元分為以下幾種情況1.非模板友元類或友元函式。 書上給了一個例子: class Foo{ void bar(); }; template <class T> class QueueItem
C++12.1.4 類的前向宣告、不完全型別類
簡介 在一個給定的原始檔中,一個類只能被定義一次,如果在多個檔案中定義一個類,那麼每個檔案中的定義必須是完全相同的 將類定義放在標頭檔案中,可以保證在每個使用類的檔案中以同樣的方式定義類。使用標頭檔案保護符,來保證即使標頭檔案在同一個檔案中被包含多次,類定義
C++基類解構函式宣告為虛擬函式
先來看幾段程式例子:1. 將基類解構函式宣告為虛擬函式#include <iostream
對類前置宣告和包含標頭檔案的一點理解(類的交叉引用)
//Layer.h// 圖層類#pragma once #include "Symbol.h"class CLayer {public: CLayer(void); virtual~CLayer(void); void CreateNewSymbol();private: