c訪問私有成員變數
『壹』 C++中訪問私有成員的問題
什麼是私有成員?是他私有的變數,假如說你定義個人身體的類,私有的比如是
內臟,骨頭,你是怎麼強制訪問?把人殺了屍解嗎?既然定義了私有成員,就是被隱蔽不能被其他類對象訪問的。所以做不到訪問私有成員。
『貳』 c++的私有靜態數組成員怎樣訪問
根據C++的規范,類內的私有成員變數是不允許在類外進行訪問的。
通常情況下,類的成員變數建議使用protected和private進行修飾。避免外部介面直接操作成員變數。
如果外部對象想要對該變數進行讀取和修改,應當顯式的聲明public函數介面,例如void setValue(int value);和int getValue();在函數中對私有成員進行訪問。
『叄』 在C++中訪問類的私有成員變數的方法有哪些
(1)通過公共函數為私有成員賦值
#include<iostream>
usingnamespacestd;
classTest
{
private:
intx,y;
public:
voidsetX(inta)
{
x=a;
}
voidsetY(intb)
{
y=b;
}
voidprint(void)
{
cout<<"x="<<x<<' '<<"y="<<y<<endl;
}
};
intmain()
{
Testp1;
p1.setX(1);
p1.setY(9);
p1.print();
return0;
}
(2)利用指針訪問私有數據成員
#include<iostream>
usingnamespacestd;
classTest
{
private:
intx,y;
public:
voidsetX(inta)
{
x=a;
}
voidsetY(intb)
{
y=b;
}
voidgetXY(int*px,int*py)
{
*px=x;//提取x,y值
*py=y;
}
};
intmain()
{
Testp1;
p1.setX(1);
p1.setY(9);
inta,b;
p1.getXY(&a,&b);//將a=x,b=y
cout<<a<<' '<<b<<endl;
return0;
}
(3)利用函數訪問私有數據成員
#include<iostream>
usingnamespacestd;
classTest
{
private:
intx,y;
public:
voidsetX(inta)
{
x=a;
}
voidsetY(intb)
{
y=b;
}
intgetX(void)
{
returnx;//返回x值
}
intgetY(void)
{
returny;//返回y值
}
};
intmain()
{
Testp1;
p1.setX(1);
p1.setY(9);
inta,b;
a=p1.getX();
b=p1.getY();
cout<<a<<' '<<b<<endl;
return0;
}
(4)利用引用訪問私有數據成員
#include<iostream>
usingnamespacestd;
classTest
{
private:
intx,y;
public:
voidsetX(inta)
{
x=a;
}
voidsetY(intb)
{
y=b;
}
voidgetXY(int&px,int&py)//引用
{
px=x;//提取x,y值
py=y;
}
};
intmain()
{
Testp1,p2;
p1.setX(1);
p1.setY(9);
inta,b;
p1.getXY(a,b);//將a=x,b=y
cout<<a<<' '<<b<<endl;
return0;
}
『肆』 在C++中訪問類的私有成員變數的方法有哪些
c++類中成員函數默認的許可權是私有的(就是自己才能用),public注釋掉後,output()方法變成私有成員。類外的其他函數都不能調用。只有該類內部的方法可以調用。
public沒被注釋掉的時候,output()方法是公有的,類外的函數也可以調用
『伍』 c++類中靜態成員函數怎麼訪問類私有變數
如果私有變數是靜態的,可以直接訪問,或通過類名::變數名訪問;
如果私有變數是實例成員,要先創建一個類的對象,再通過對象名.變數名訪問,或先new一個對象,將new的返回值賦給一個指針,通過指針名->變數名訪問或通過(*指針名).變數名訪問。
『陸』 c++ 類的私有成員變數可以被訪問嗎
C++類體聲明的私有成員僅供類體內成員訪問,其它地方不可訪問。
『柒』 如何訪問類中的private成員變數
總所周知,類中的private屬性的成員變數在類外是無法訪問的,今天我們探討的就是如何在類外訪問private屬性的成員變數。
我們先來看一個簡單的例子:
class STU
{
public:
STU()
{
x = 5;
y = 10;
}
private:
int x;
int y;
};
int main()
{
STU t;
int*p = (int*)&t + 1;
return 0;
}
通過上面的代碼我們可以知道,方法是把類對象的地址強制轉化為int*類型,因為類對象里存儲的只是成員變數,所以通過對指針的操作可以訪問到private類型的成員變數。
接下來還有一個例子:
class STU
{
public:
STU()
{
c = 'f';
y = 10;
}
private:
char c;
int y;
};
int main()
{
STU t;
int*p = (int*)((char*)&t + 4);
cout << *p << endl;
return 0;
}
這段代碼中最重要的就是int*p = (int*)((char*)&t + 4);
因為第一個數據是char類型的,所以要把對象的地址轉化為char*型,對象中存在兩種類型的數據,需要考慮內存對齊,所以當要訪問下一個int型變數的時候,指針需要加4,而不是加1。最後要取到int型的變數,還是要把地址強轉為int *。