1. 程式人生 > >通過友元函式修改類的私有屬性

通過友元函式修改類的私有屬性

#include<iostream>//21
using namespace std;
//友元函式
class A
{
public:
	friend void modifyA(A *pA, int _a);
	A(int _a, int _b)
	{
		this->a = a;
		this->b = b;
	}
	int getA()
	{
		return this->a;
	}
private:
	int a;
	int b;
};
void modifyA(A *pA, int _a)//全域性函式宣告成類的友元函式,修改了類的私有屬性,本來全域性函式是不能夠修改類的私有屬性的
{
	pA->a = _a;
}
int main()
{
	A a1(1, 2);
	cout << a1.getA() << endl;
	modifyA(&a1, 3);
	cout << a1.getA() << endl;
	system("pause");
	return 0;
}

相關推薦

通過函式修改私有屬性

#include<iostream>//21 using namespace std; //友元函式 class A { public: friend void modifyA(A *pA, int _a); A(int _a, int _b) { th

C++函式訪問私有成員

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

學生,含學生姓名與成績,用函式訪問私有成員,對兩個物件的成績進行比較。(2018.9.19 c++作業)

定義兩個物件,與一個友元函式(使用c++中引用傳遞的方式,實現引數的傳遞) #include using namespace std; class student { private: char name[20]; float grade; public: s

“friend宣告函式函式卻依舊無法訪問該類的私有屬性”的解決方法

“friend宣告友元函式,友元函式卻依舊無法訪問該類的私有屬性”的解決 一次C++作業題, 搞了很久弄明白了, 雖然成功了, 但VS2015依舊有紅線提示錯誤, 不過不影響編譯、執行, 這似乎是VS

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

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

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

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

模板中使用函式的方式,派生函式對基的成員使用情況

在一般友元函式的前面加上 template<typename T),注意在函式的宣告和定義處都要加這個模板 例如: //模板類,長方體類 template <typename ElementType> class Rectangle { ///*過載基類的輸入輸出運算子*/

6.8 複數物件的加法運算-函式

要求定義友元函式實現2個複數物件的加法運算。 提示:複數的加法按照以下規定的法則進行:設z1=a+bi,z2=c+di是任意兩個複數,則它們的和z3是 (a+bi)+(c+di)=(a+c)+(b+d)i. 解題思路 :這裡用到了友元函式注意結合6.9 去看 分析友元函式和成員函式的區別

c++之函式

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

C++----成員函式函式

//成員函式做友元函式: //只讓visit1做building的好朋友(只有visit1能訪問building的私有屬性) class Building; class goodGay { public: goodGay(); void visit1(); void visit2();

關於模板函式的宣告與定義

//Widget.h #ifndef _WIDGET_H_ #define _WIDGET_H_ #include <iostream> using namespace std; template<class T> class Widget {

C++函式用法詳解

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

C++學習筆記(七)--操作符過載 函式 的繼承 訪問控釋protected

C++ Primer Plus的閱讀大概到這邊也就先暫時告一段落了(因為開學了!!) 然後近期找來了C++ Primer稍微翻了翻覺得確實寫得比Plus要好一些,而且加入了C++11的新特性,但是無論哪本書對於這些最基本的功能應用大抵也是差不多的,所以也沒覺得看的是Plu

的成員函式作為回撥函式(外一篇:函式

問題的提出  我們已知道類具有封裝和資訊隱藏的特性。只有類的成員函式才能訪問類的私有成員,程式中的其他函式是無法訪問私有成員的。非成員函式可以訪問類中的公有成員,但是如果將資料成員都定義為公有的,這又破壞了隱藏的特性。另外,應該看到在某些情況下,特別是在對某些成員函式多次呼叫時,由於引數傳遞,型別檢查和安全性

函式的繼承與傳遞問題

    C++ Primer中有如下描述:友元關係不能被繼承,基類的友元對派生類沒有特殊的訪問許可權。     然而通過實踐發現,VS編譯器並沒有安裝上述描述來處理,下面的規則與上述描述相悖,卻符合VS編譯器的處理規則。     注:有待通過g++編譯器來驗證。 1 友元

(函式成員函式) C++

        有些情況下,允許特定的非成員函式訪問一個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。         友元(frend)機制允許一個類將對其非公有成員的訪問權授予指定的函式或者類

待補遺(6)[C++]兩個如何通過宣告互相訪問對方的非公有成員

1.設有類A,和類B兩個類,假定類A的宣告在類B之前(類的宣告總會有先後之分) 2.類A與類B,各自具有一個private許可權的func函式。 一、類A,類B的宣告如下(定義在在同一個原始檔中): #include <iostream> class A{

一個的成員函式宣告為另一個函式

友元提供了不同類的成員函式之間、類的成員函式與一般函式之間進行資料共享的機制。通過友元,一個不同函式或另一個類中的成員函式可以訪問類中的私有成員和保護成員。c++中的友元為封裝隱藏這堵不透明的牆開了一個小孔,外界可以通過這個小孔窺視內部的祕密。 友元的正確使用能提高程式的執

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

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