1. 程式人生 > >C++友元類使用之前置宣告(定義變數)

C++友元類使用之前置宣告(定義變數)

今天專案使用到了友元類,於是便先試著搞個簡單地使用例子

#include<iostream>
class b;
class a
{
private:
int value;
protected:
void funprotected();
public:
friend b;
a(int x);
//b bclass;
void funpublic();
};


a::a(int x)
{
value = x;
}

class b
{
public:
void fun(a&);
};
void b::fun(a& aclass)
{
std::cout << aclass.value << std::endl;
}


int main()
{
a aclass(5);
b bclass;
bclass.fun(aclass);
return 0;
}

在程式編譯時順利通過,但是去掉其中註釋後就會提示未定義的型別b,我查了一下,在實際定義類體之前,不能用該型別去定義變數,只能做宣告,但是,我想這應該不算是定義變數吧,因為並沒有分配記憶體,好吧,我已經被迫認為註釋掉的那一行就是定義變量了。

相關推薦

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++宣告及其呼叫

友元類 友元除了前面講過的函式以外,友元還可以是類,即一個類可以作另一個類的友元。當一個類作為另一個類的友元時,這就意味著這個類的所有成員函式都是另一個類的友元函式。 使用友元類時注意: (1) 友元關係不能被繼承。 (2) 友元關係是單向的,不具有交換性。若類B

c++

友元類和java的反射機制作用差不多,打破類的封裝性。 #include "stdafx.h" #include"iostream" using namespace std; class A {

舉例說明C++的作用

如下所示例,class A與class B並沒有繼承關係,但是我們想讓A直接訪問B的私有變數,則可以將class B作為class A的友元。 #include <iostream> using namespace std; class A { class B {

C++模板函式,宣告的三種情況

根據《C++ Primer》第三版16.4節的敘述,C++類模板友元分為以下幾種情況1.非模板友元類或友元函式。 書上給了一個例子:class Foo{    void bar();};template <class T>class QueueItem{   

C++函數和

res con 形參 display tle private 一點 second main 通過friend關鍵字,我們可以將不屬於當前類的一個函數在當前類中加以聲明,該函數便可以成為當前類的友元函數。#include<iostream>using namesp

c++函式和

c++友元函式一些見解 1、為什麼要引入友元函式:在實現類之間資料共享時,減少系統開銷,提高效率 具體來說:為了使其他類的成員函式直接訪問該類的私有變數 即:允許外面的類或函式去訪問類的私有變數和保護變數,從而使兩個類共享同一函式 優點:能夠提高效率,表達簡單、清晰

一個使用誤區C++)

這個問題,我困擾了好一會,決定記錄一下。 一、問題引出以及分析 問題程式碼簡化如下: class B; class A { friend class B; private: A() = default; bool operator()(int lh

C++學習筆記10)運算子過載,函式,

c++允許我們為運算子定義專門的函式,這被稱為運算子過載: 運算子可以簡化字串的操作,‘+’,以及使用關係運算符比較字串,[ ]運算子訪問向量中的元素; 例如: #include <iostream> #include <string> #include <

C++函式和C++ friend)詳解

私有成員只能在類的成員函式內部訪問,如果想在別處訪問物件的私有成員,只能通過類提供的介面(成員函式)間接地進行。這固然能夠帶來資料

[C++]【的三種宣告及注意事項

class A{     friend void fri_fun(A); private:     int a=9; }; void fri_fun(A aa){     cout<<aa.a<<endl; }   在程

C++中的函數和

pan string 拷貝構造函數 student 私有 oid 一個 each cor 友元函數可以修改類的私有屬性,寫在類的public/private/protected底下都可以。友元函數的函數體寫在類的外面時,寫法和普通函數一樣,不需要加friend關鍵字,但函數

C++開發系列-函數

return com 現在 pause 參數 TE ++ 操作 數據 友元函數 默認一個類的私有屬性只能在該類的內部可以直接訪問。友元函數申明在內的內部,實現在類的外部可以直接訪問類的私有屬性。 class A1 { public: A1() {

4、【C++】靜態成員變數/靜態成員函式/行內函數/函式//成員函式

一、靜態成員     我們可以使用 static 關鍵字來把類成員定義為靜態的。當我們宣告類的成員為靜態時,這意味著無論建立多少個類的物件,靜態成員都只有一個副本。     靜態成員在類的所有物件中是共享的。如果不存在其他的初始化語句,在建立第一個物件時,所有的靜態資料都會被初始化為

C++中定義一個不能被繼承的(+模板)

自從C++11標準出來之後,就有了關鍵字final可以直接宣告一個類不能被繼承。那麼,在此之前如果想要一個類不能被繼承,可能還需要下一番功夫。 文章目錄 1.宣告建構函式為私有 2.子類宣告為基類的友元類 3.虛繼承——子類

C++----整個

//類做友元類: class Building { friend class goodGay; public: Building(); public: string m_sittingroom; //客廳 private: string m_bedroom; //臥室 }; Build

C++裡前置宣告初探

我們先了解下C++下函式的情況,然後再類比到C++類 一 C++下函式宣告和定義 我們在用C++寫程式碼時(假設原始檔只有一個main.cpp),經常會按照以下步驟寫: 先對自定義的函式進行宣告 在main函式裡呼叫第1步裡宣告好的函式 編寫函式的實際程式碼,

C++ 習題 輸出日期時間--

設計一個日期類和時間類,編寫display函式用於顯示日期和時間。要求:將Time類宣告為Date類的友元類,通過Time類中的display函式引用Date類物件的私有資料,輸出年、月、日和時、分、秒。

c++成員運算子過載和運算子過載的比較以++,--運算子為例)

1、對雙目運算子而言,成員運算子過載函式引數列表中含有一個引數,而友元運算子過載函式引數列表含有兩個引數;對單目運算子而言,成員運算子過載函式引數列表中沒有引數,而友元運算子過載函式引數列表含有一個引數。 2、雙目運算子一班可以被過載為友元運算子和成員函式運算