1. 程式人生 > >試圖對C++友元函式,靜態成員函式做個小結

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

2014年12月13日 22:28:43第一篇部落格   以下僅僅是個人觀點,請大家指正.

 友元函式分類:(按照我的想法,結合C++ Plus)

一.   1. 讓其他類(B類)的成員數最為類A的友元函式(只需要在類A中宣告即可)

        2.讓類B成為類A的友元類---->>>以上兩種方式必須通過B的引用,指標或者物件來呼叫

二.   1. 讓一個全域性函式成為友元函式(可以定義在類內,也可以定義在類外,但與靜態成員函式不同的是,在類外定義和宣告不能加上A::作用域描述符.

            因為友元不是類A的作用域內的函式,他只是在類A中宣告此函式有許可權訪問類成員而已,與一般的宣告意義是有很大區別的. 因此呼叫的時候也不能加上A::) 

           另外,值得注意的是,有些編譯器還需要在類外再次宣告友元函式,使得這個友元函式全域性可見(個人見解),有些則不需要.

           建議,在類內宣告友元,在類外定義友元,這樣,可以避免編譯器的限制.

          再次強調友元函式是全域性的,在類內的宣告只是為了說明他有許可權去訪問類內的成員.

靜態成員函式: 

         靜態成員函式是在類A作用域的,屬於類A的成員,但不是物件成員.

         它可以通過物件呼叫(但不建議),因此它的宣告定義要加上A::作用域說明符(在類外).

靜態成員變數:

        除了靜態const型別的成員變數外,靜態成員變數必須在類外初始化.

        靜態的const型別的成員變數可以在類內初始化.

一般的

變數的宣告是為了表明作用域和生命週期.申請記憶體空間

變數的初始化是告訴編譯器變數最初應該賦什麼值.

變數的定義往往伴隨了宣告和初始化(沒有明顯賦值的就是預設初始化,例如int型別全域性變數被預設賦值為0)

函式的宣告表明此名字在當前作用域可見,並且可能伴隨著名字隱藏.

函式的定義就是表明函式具體做什麼.        C++感覺名字查詢和作用域很重要

有一種函式需要多次定義,那就是inline函式,因此inline函式一般定義在標頭檔案中

相關推薦

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

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

C++】靜態成員

友元 C++中,類外的成員不能訪問類內的私有和保護型別成員。而友元函式可以不受訪問限制訪問類的任何成員。友元函式雖然可以在類內進行宣告,但是友元函式不是成員函式,因此沒有this指標。 舉例說明: class Clock { public: Clo

c++函式類的理解

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

2. 靜態成員

存在的意義: 當把類的成員的訪問許可權定義為private或者protected時,在類外只能通過公有函式成員訪問,有時候頻繁呼叫函式成員,必然降低程式執行效率。 友元的作用: 友元的作用是提高程式的執行效率,它可以直接訪問類的私有和保護成員,但也因此破壞了類的

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

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

C++實現輸入輸出運算子過載、函式成員函式實現複數類Complex

今天答應幫朋友做一個C++題目,頗費了一番周折,終於還是寫出來了,讓很久沒敲程式碼的我反省了一下,也回憶了以前學過的知識。 題目要求如下: 一、按下列要求編制複數類,並除錯通過: 1)  基本的建構函式; 2)  成員運算子+、-實現複數的加減運算; 3)  友元運算子+

C++——運算子的過載---以成員函式方式過載---以函式方式過載

一、運算子的過載   1、運算子的過載   允許把標準運算子(如+ - * /等運算子)應用於自定義資料型別的物件,可以提高程式的可讀性,運算子的過載本質上還是函式過載。運算子僅僅是語法上的方便,它是另一種函式呼叫的方式,只有在設計涉及的程式碼更容易寫,尤其是更容易讀的時候才有必要過載。   2、實現運

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

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

C++筆記 第二十六課 類的靜態成員函式---狄泰學院

如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。 學習C++編譯環境:Linux 第二十六課 類的靜態成員函式 1.未完成的需求 統計在程式執行期間某個類的物件數目 保證程式的安全性(不能使用全域性變數) 隨時可以獲取當前物件的數目(Failure)

《隨筆五》——C#中的 —— “ 靜態成員的生存期 、靜態成員函式成員常量”

目錄 靜態成員的生命期 靜態成員函式 成員常量 常量與靜態量 先看一個靜態欄位的示例: namespace Ch05Ex03 { class Persion { int Mem1; static int Mem2; //

5.4-day04-C++拷貝建構函式/靜態成員

一、拷貝建構函式和拷貝賦值運算子 1.拷貝構造:用一個已有的物件,構造和它同類型的副本物件——克隆。 2.形如 class X {   X (const X& that) { ... } }; 的建構函式成為拷

C++---類的靜態成員變數和靜態成員函式

class Person { public : Person() { } static int m_Age ; //加入static 就是靜態成員變數,會共享資料; //靜態成員變數,在類內宣告,類外進行初始化; } int Person.m_Age = 0; //類外初始化

C++中靜態成員變數和靜態成員函式的用法

昨天在修改專案函式功能時,在其中一個類中添加了一個靜態成員變數和兩個靜態成員函式,結果在連結時出現一個非常典型的錯誤:“The following symbols referenced in processor “p0” could not be resolve

C++之靜態成員函式為什麼不能為虛擬函式

應該知道靜態成員函式屬於類,也屬於物件,但終歸屬於類,他在記憶體中只有一份。而虛擬函式必須根據物件型別才能知道呼叫哪一個虛擬函式,故虛擬函式是一定要在物件的基礎上才可以的,兩者一個終歸屬於類,一個必依賴

你不知道函式成員函式

1.友元函式是一種定義在類的外部的普通函式或類,但需要在類體內進行說明;成員函式是在一個類裡面所定義的函式。2.友元函式和成員函式一樣可以訪問類中的私有成員的非成員函式,會破壞了類的封裝性和隱藏性。3.友元函式定義:friend 函式原型 ,例如:friend 函式返回值 函

C# 函式

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

C++函式類用法詳解

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

C++ 靜態成員函式 訪問 類成員變數 & 函式指標、函式指標陣列、函式指標陣列指標的使用 & 回撥函式的使用

靜態成員函式可以通過引用類物件訪問類成員變數;test.h#ifndef TEST_H #define TEST_H class Test { public: Test(); Tes

C++的靜態成員函式指標

先簡單的說說非靜態的成員函式。 非靜態成員函式指標的型別:     類的非靜態成員是和類的物件相關的。也就是說,要通過類的物件來訪問變數。 成員函式的型別定義為:     typedef void (A::*pfunc)();  A是一個類,有一個成員函式void test

c++函式宣告及其呼叫

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