私有成員變數訪問
Ⅰ c++ 類的私有成員變數可以被訪問嗎
C++類體聲明的私有成員僅供類體內成員訪問,其它地方不可訪問。
Ⅱ 類對象可以訪問自己的私有成員
在類自己的成員函數及類的友元類和類的友元函數里是允許訪問私有成員的,如果是在非類的成員函數或友元類或友元函數中是不可能的,你可以試試
Ⅲ 關於子類訪問父類私有成員變數問題,大神來看看
樓上說錯了,就只有一個B實例,沒有A實例。
繼承的概念,就是把父類的所有東西都繼承下來了,包括A類的x成員變數和所有方法,只是在B類里無法直接訪問x變數而已。
所以創建的B實例的內存里,也是有x,並為它分配了內存空間的
Ⅳ 在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++中派生類如何實現對基類私有成員的訪問
派生類不能對基類私有成員進行訪問。
要在派生類中對基類成員進行訪問,可以:
1,在派生類中對基類成員的public屬性進行訪問,以間接訪問基類的私有成員;
2,在基類中將私有成員定義為protected訪問屬性,以在派生類中直接對其進行訪問;
Ⅵ 如何訪問類中類的私有數據成員
類中的私有成員只能在類的內部訪問,在類的外部是不能訪問的,一般訪問私有成員的方法是在類中定義一個共有的方法來訪問這個私有變數,然後在類的外部調用這個方法,以達到訪問私有成員變數的目的
Ⅶ 請問子類中繼承過來的公有函數,可以訪問基類的私有成員變數嗎
不可以。
可以先看下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 *。
Ⅸ 怎麼訪問別的類私有成員變數
私有成員變數在別的類中是無法訪問的,要不還叫什麼私有。
不過子類可以通過設置器和訪問器來訪問父類的私有成員變數。
public class A
{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void show()
{
System.out.println(this.getName()+","+this.getAge());
}
}
public class B extends A
{
public static void main(String[] args)
{
B b=new B();
b.setName("李三");
b.setAge(19);
b.show();
}
}