1. 程式人生 > >C++ 友元函式/實際使用的一些注意事項/重複定義

C++ 友元函式/實際使用的一些注意事項/重複定義

友元函式可以分成1.外部函式 2.其他類函式成員作為友元函式
其他的諸如友元函式導致資訊不安全的老梗就不多說了,簡單說說今天遇到的問題

  1. 重複定義問題,出現在 其他類成員作為友元函式的時候

    • (1). 在A類的宣告中寫下函式
    • (2). 在A類外給出具體定義 / 在A類宣告中直接給出定義都會導致->
    • (3). 之後再在目標類中寫下 friend void A::function 就會報錯“redefined”

    1.問題已經解決:如何利用其他類成員函式作為友元函式
    (1). 第一個應該先在類A中寫下關於“你要怎麼用類B中的私有成員”的函式宣告
    (2). 然後在類外給出具體定義
    (3). 最後在在類B中寫上准許呼叫的friend的字樣

注意事項:
(1). friend函式宣告寫在公有部
(2). 具體是用常規物件還是指標物件無所謂
(3). 分在一個檔案裡還是兩個檔案裡無所謂

(4).最大的問題僅僅是在於函式體到底是寫在裡面還是寫在外面,寫在裡面就是錯的
報錯:B中成員由於還未定義,你現在寫上怎麼操作B成員顯然是沒有意義的
同時報錯:在B中的friend字樣後面顯示本函式已經被重複定義了

(5).Summary: 函式體到底是寫在裡面還是寫在外面,怎麼決定

  • 函式想要操作其他類資料成員,但是目前此類還沒給出
  • 我們寫上超前引用宣告
  • 但是超前引用宣告只是允許你在函式引數中出現這個類的物件,那,我想呼叫這個類的方法或者想要操作一下類裡面的資料
  • 唯一的方法是我先在函式聲明裡面寫上我要用到這個類的物件
  • 然後等這個類的完整定義給出來以後我再在類外部單獨定義具體怎麼呼叫函式或者操作資料

  • 所以總的來說,先寫上所有類的超前引用宣告,然後在每一個類中僅僅定義上函式宣告

  • 最後等所有類的宣告全部寫完以後再再外面單獨定義

  • 類中僅僅寫上函式宣告,最後再在外面給出函式體宣告中不要寫:{ }

    • 不要這麼寫: function (a,b,c) { } - 不要加上大括號,不然就是重複定義錯誤

相關推薦

C++ 函式/實際使用的一些注意事項/重複定義

友元函式可以分成1.外部函式 2.其他類函式成員作為友元函式 其他的諸如友元函式導致資訊不安全的老梗就不多說了,簡單說說今天遇到的問題 重複定義問題,出現在 其他類成員作為友元函式的時候 (1). 在A類的宣告中寫下函式 (2). 在A類外給出具體定義

C# 函式

2. 簡述:不用繼承的方式為一個類增加成員方法。 3. 實現程式碼: /// <summary> /// Component擴充套件類 /// </summary> internal static class ComponentDesignMod

C++函式類用法詳解

在C++中,我們使用類對資料進行了隱藏和封裝,類的資料成員一般都定義為私有成員,成員函式一般都定義為公有的,以此提供類與外界的通訊介面。但是,有時需要定義一些函式,這些函式不是類的一部分,但又需要頻繁地訪問類的資料成員,這時可以將這些函式定義為該函式的友元函式。除了友元函式

c++函式宣告及其呼叫

1.友元函式的簡單介紹 1.1為什麼要使用友元函式 在實現類之間資料共享時,減少系統開銷,提高效率。如果類A中的函式要訪問類B中的成員(例如:智慧指標類的實現),那麼類A中該函式要是類B的友元函式。具體來說:為了 使其他類的成員函式直接訪問該類的私有變數。即:允許外

c++函式說明

1)C++中引入友元函式,是為在該類中提供一個對外(除了他自己以外)訪問的視窗;2)這個友元函式他不屬於該類的成員函式,他是定義在類外的普通函式  只是在類中宣告該函式可以直接訪問類中的private或者protected成員。使用友元函式注意的要點:類中通過使用關鍵字fri

試圖對C++函式,靜態成員函式做個小結

2014年12月13日 22:28:43第一篇部落格   以下僅僅是個人觀點,請大家指正.  友元函式分類:(按照我的想法,結合C++ Plus) 一.   1. 讓其他類(B類)的成員數最為類A的友元函式(只需要在類A中宣告即可)         2.讓類B成為類A的友元

c++函式類的理解

1,友元函式的定義和作用 我們已知道類具有封裝和資訊隱藏的特性。只有類的成員函式才能訪問類的私有成員,程式中的其他函式是無法訪問私有成員的。非成員函式可以訪問類中的公有成員,但是如果將資料成員都定義為公有的,這又破壞了隱藏的特性。另外,應該看到在某些情況下,特別是在對某

C++函式訪問類的私有成員

#include <iostream>#include<cstring>using namespace std ;class Student{private:string  name;int age;int sore;public:Student(string name,int age

C++ 函式的使用&過載“輸入輸出”運算子

友元函式 形式 friend 型別名 友元函式名(形參表); 然後在類體外對友元函式進行定義,定義的格式和普通函式相同,但可以通過物件作為引數直接訪問物件的私有成員 說明如下 1)必須在類的說明中說明友元函式,說明時以關鍵字friend開頭,後跟友元函式的函

c++ 函式,模板函式

友元函式. 類的友元函式是定義在類外部,但有權訪問類的所有私有(private)成員和保護(protected)成員。儘管友元函式的原型有在類的定義中出現過,但是友元函式並不是成員函式。 友元可以是一個函式,該函式被稱為友元函式;友元也可以是一個類,該類被稱

C++ 函式

#include <iostream> using namespace std; class girl { private: char *name; int age; friend class boy; //宣告類boy是類girl的友元 public:

c++函式簡析

在實現類之間資料共享時,減少系統開銷,提高效率。如果類A中的函式要訪問類B中的成員(例如:智慧指標類的實現),那麼類A中該函式要是類B的友元函式。具體來說:為了 使其他類的成員函式直接訪問該類的私有變數。即:允許外面的類或函式去訪問類的私有變數和保護變數,從而使兩個類共享同一函式。 3.友元函式和普通

C++函式類(C++ friend)詳解

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

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

今天專案使用到了友元類,於是便先試著搞個簡單地使用例子 #include<iostream> class b; class a { private:int value; protected:void funprotected(); public:friend b

C++過載(2):通過成員函式函式過載

分別通過成員函式和友元函式完成過載 #include <iostream> using namespace std; class Complex { public: Complex(double real =0,double imag=0):real(real),imag(i

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

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

C++的函式

類的友元函式申明在類內部,定義在外部。(怎麼記得好像有一個東西也是這麼玩的,好吧,原來是靜態變數和靜態函式,不過不同的是,靜態的東西,它們還是屬於這個類的,而且定義靜態成員的時候是要加作用範圍),它實際上是可以理解為是插入類內部的一個間諜,可以獲取類內部的protected和private的資訊,e

c++之函式

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

YTUOJ——C++ 習題 輸出日期時間--函式

題目描述 設計一個日期類和時間類,編寫display函式用於顯示日期和時間。要求:display函式作為類外的普通函式,分別在Time和Date類中將display宣告為友元函式。在主函式中呼叫display函式,display函式分別引用Time和Date兩個類的物件的私有資料,輸出年、月

C++ 函式返回指標注意事項

C++ 不支援在函式外返回區域性變數的地址,除非定義區域性變數為static 變數。 #include <iostream> #include <ctime> #include <cstdlib> using namespace std; /