當前位置:首頁 » 文件傳輸 » c擴展方法訪問私有
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c擴展方法訪問私有

發布時間: 2022-07-25 09:46:27

❶ C++友元函數訪問類的私有數據

您好,看了代碼理論上是可以的,然後在機子上編寫了一個測試代碼,就你上面提到的代碼,我的測試時通過的沒有遇到問題,代碼如下:
/*--------------------------------------------------------------------------------
The test test.h
-----------------------------------------------------------------------------*/
#include<iostream>
using namespace std ;

class Test
{
private:
friend void setX(Test &, int) ;
friend ostream & operator<<(ostream &, Test &) ;
int x ;
public:
int getX() ;
} ;

void setX(Test &t, int iVal)
{
t.x = iVal ;
}

ostream & operator<<(ostream &output, Test &t)
{
output<<t.x<<endl ;
return output ;
}

int Test::getX()
{
return x ;
}

/*-----------------------------------------------------
Client.cpp
---------------------------------------------------*/
#include"test.h"

int main()
{
Test t ;
setX(t, 3) ;
cout<<t.getX() ;

cout<<t ;

getchar() ;
return 0 ;
}
測試下吧,可能跟你之前的代碼有關吧。

❷ c++子類訪問父類私有成員

一般好的項目,代碼風格,設置成private的成員變數,不應該直接訪問它的,最好為Circle::r寫個成員函數,就可以間接訪問了。比如
int Circle::Getr()
{
return r
}

另外,如果你非要不該父類的情況下訪問,也是可以的,比如用類的成員指針,具體使用不好理解,風格不好。

❸ C 數據成員如何從公有改為私有

首先,相同類的不同對象可以訪問彼此的私有數據,qht9624543 的回答是錯的。

就語言語法定義來說,類的成員函數當然可以訪問本類的所有私有數據。如果這個類聲明了友元(friend)類或友元函數,那麼這些友元類和函數也可以訪問其私有數據。

你可以這么理解,一個類是自己的友元,相同類的對象之間是友元關系,所以相同類的對象之間也可以訪問彼此的數據。

如果說深一點,為什麼要有私有數據,是為了隱藏這個類的細節,讓外部不了解這個類細節的代碼不去亂用相關數據而導致高耦合。而相同類顯然是了解自己的細節的,所以沒必要去隱藏私有數據。友元則相當於由程序員指明了某個代碼了解這個類的細節。

學C++慢慢來,面向對象這種東西要慢慢去悟,看到一個現狀,想想它的本質是什麼,為什麼要這樣,有一天你把它們的緣由都搞清楚的時候你對OOP的理解應該就差不多了,呵呵,加油吧。

❹ 在C++中怎麼調用類中的私有成員函數

C++中調用類的私有成員函數的方法就是,在該類中再聲明定義一個公有成員函數
在其函數內部調用自己的私有成員函數,向外使用的話,在別的類中包含該類的頭文件,就可以通過公有函數隱式的訪問私有成員函數;
給個簡單例子
class A
{
private:
void fuck();
public:
void howfuck()
{
fuck();
}
};

#include "A.h"
class Fuck
{
public:
A xiha;

}

xiha.howfuck(); //這樣就可以訪問A類的私有成員fuck函數了

❺ c++中可不可以在一個類中訪問另一個類的私有成員

可以,只要定義該類為另一個類的友元類即可。

友元類:

class A

{

friend class B

private: int aa;

};

class B

{

public:

void output()

{

cout << a.aa << endl;

}

private: A a;

}

使用友元類時:

(1) 友元關系不能被繼承。

(2) 友元關系是單向的,不具有交換性。若類B是類A的友元,類A不一定是類B的友元,要看在類中是否有相應的聲明。

(3) 友元關系不具有傳遞性。若類B是類A的友元,類C是B的友元,類C不一定是類A的友元,同樣要看類中是否有相應的申明。

(5)c擴展方法訪問私有擴展閱讀:

友元類使用注意事項:

1、友元可以訪問類的私有成員。

2、只能出現在類定義內部,友元聲明可以在類中的任何地方,一般放在類定義的開始或結尾。

3、友元可以是普通的非成員函數,或前面定義的其他類的成員函數,或整個類。

4、類必須將重載函數集中每一個希望設為友元的函數都聲明為友元。

5、友元關系不能繼承,基類的友元對派生類的成員沒有特殊的訪問許可權。如果基類被授予友元關系,則只有基類具有特殊的訪問許可權。該基類的派生類不能訪問授予友元關系的類。

參考資料來源:網路-友元類

❻ 高分 c++ typedef 訪問基類的私有虛函數

//使用typedef來定義一個函數指針,可以參閱相關資料
typedefvoid(*Fun)(void);
voidmain()
{
Bb;//一個子類的對象
//這里如果不用typedef的話就應該是
//void(*pFun)(void);
FunpFun;
for(inti=0;i<3;i++)
{
//其實是得到b的地址,但是不能直接寫成intaddr=&b;這樣編譯器會報錯的
//所以才有了下面的兩個*
intaddr=*(int*)&b;
//現在addr變成了存儲b開始的地址的一個int型變數,所以我們還需要:
//classB的布局為:B的vtable,函數h的地址
//而B的vtable展開就是:函數g的地址,函數f的地址
//所以B的布局展開就是:函數g(被B覆寫)的地址,函數f(A的f)的地址,函數h的地址
//每個地址佔4個位元組
//那麼b+0為g的地址,b+4為f的地址,b+8為h的地址
//但是為什麼循環里是按照1遞增呢?因為上面的情況是按照char類型遞增的
//根據C的定址規則,增加一個int其實就是增加了4個位元組
//所以我們有了(int*)addr,這是說按照int型的字長來增加定址位元組數
//經過上面的分析,可以知道:
//((int*)*(int*)(&b)+0)其實就是g的地址
//((int*)*(int*)(&b)+1)其實就是f的地址
//((int*)*(int*)(&b)+2)其實就是h的地址
//那麼它終究還是一個地址,於是前面再加了一個*,就是函數的內容
pFun=(Fun)*((int*)*(int*)(&b)+i);
//然後開始運行這個函數
pFun();
}
}

vtable很復雜,可以參看C++對象模型那本書,如果只是想現在大致了解一下,可以參看下面的網址

http://blog.csdn.net/haoel/article/details/1948051/

我講的也可能不對,不可盡信。

❼ c ++私有成員訪問性

你這個問題有2方面的問題:
一:類和對象的概念你沒搞清楚,類是對象的高度抽象,對象是類的實體化,在內存中來說,類就是一種數據類型跟int等式一樣的,單說類是沒有意義的,它並不佔用內存,所以你這個類a的私有成員被類a對象訪問本來就沒任何意義。
二:類的私有成員是類的內部屬性,就相當於一個人的心臟的跳動頻率會讓別人訪問修改么一個道理,private的意思是在被繼承或者類的外部無法訪問這個成員,類在實體化後也就是建立對象後,具體對象的函數可以調用自己內部的private對象或者是友員函數也可以,private成員在不同的對象之間也是不能夠相互訪問的。
打字累死了,求給分。

❽ C ++如何調用私有private方法

C++可以在類內調用private函數,或者在友元函數內調用。

❾ 高手指教啊:C++把類成員設成私有的、用公有函數訪問,和 直接把類成員設成公有的 有什麼區別

1)可擴展性,比如一個Set函數,他一開始只是設置成員變數,後來因為功能變化,需要經過計算之後再設置成員變數,用Set函數可以很方便的修改,而且不影響使用者。如果直接使用成員變數,那麼所有使用的地方都需要修改。
2)安全性,通過函數可以規定使用者的訪問許可權,比如一個類只提供了Get方法,那麼使用者就不能修改這個成員變數,保證這個成員變數只有自己能夠修改。如果直接訪問公有成員變數,那麼使用者就獲得了完全的訪問許可權,他甚至可以在類的外部刪除這個成員變數,等到該類再使用這個成員變數時,就會出現異常,這是非常不安全的。