當前位置:首頁 » 密碼管理 » 類指針訪問

類指針訪問

發布時間: 2022-12-15 08:00:43

1. C++類指針在訪問的時候何時用"->",何時候用"."

很高興你能問這個問題,我想很多學程序設計不久的學生真不知道->的用法,我仔細說給你聽吧:
簡單來說,「->」的前面一定是一個「指向結構體的指針」或「對象指針」,後面是結構或對象的一個"成員" 。
如有:A->B,則可以肯定A是一個結構體指針或類的對象指針,而B是A中的一個成員。
以你的便子為例:
class A{...假設裡面含有一個set()函數...}
A a,*p;
a是一個對象名,所以可以用a.set(),當然你還可以用(&a)->set( ),兩者是等價的。
p如果指向一個結構體或對象,可以這樣使用其中的成員:
p->set( )或者 p[0].set( ) 或者 (*p).set( )
當然如果p指向一個結構體數組或對象數組的話,則可以這樣用:p->set( )表示對數組的第0個元素進行操作,等價於p[0]->set( )或*(p+0).set( ),如果想訪問數組的第i個對象中的成員,則可以有這樣幾種方式,他們是等價的:
p[i],set( ) , *(p+i).set( ), (p+i)->set( ),
(&p[i])->set( )
可以看出符號"->"的左邊必須是結構體或對象指針,而不能是普通變數。右邊肯定是結構體或對象的成員。
特別說明的是:簡單地認為「->」的左邊是一個指針過於簡單了。這個符號是用來代替*和.的合成,因為一般情況下通過「指針」訪問結構體或對象成員,是「先求值,再取分量」,即上述的(*p).set( ),因為用兩個符號過於麻煩,所以才使用「->」來代替,這樣直觀、簡單得多。

2. void類型的指針訪問內存,為什麼錯誤 ps對於void類型指針了解非常少,希望能夠給點簡單的介


int *p;這一句定義了一個指針變數,但是沒有指向任何值,不安全的指針。

p=100;這一句是錯誤的,指針不能顯式的賦以地址。


void 指針可以網路。void相當與萬能指針,可以指向任何類型的變數。

但是不是很建議用,例如 malloc()可以申請內存,且返回空指針,可以我們一般顯式轉換成int,之類。。。

3. C++類中,用指針訪問對象成員問題

  1. test是棧對象,不需要顯示的初始化,會默認調Tclass的構造函數。

  2. pt是堆對象,需要顯示的初始化,不會自動調Tclass的構造函數。

  3. 正確的方式如下:

int main() {

Tclass test;

Tclass *pt = new Tclass();

pt->x = 100;

pt->y = 200;

pt->print();

test.x = 150;

test.y = 450;

test.print();

cout << "x+y=" << add(&test);

return 0;

}

4. C++類成員包含另一個類的指針對象,怎麼對這個指針對象操作來訪問它的成員

問題1:
A*p;

沒有指向任何地址的指針,而你又用這個沒指向任何地址的指針去修改值:p->data=1

問題2
指針訪問數據都是用->來訪問的。。如果你非要用.來訪問,可以這樣寫:(*p[0]).data

正確的代碼應該是這樣的:

#include<iostream>
usingnamespacestd;
classA
{
public:
intdata;
};
classB
{
public:
A*p;
public:
B();
voidf();
};
B::B()
{
this->p=newA();
}
voidB::f()
{
this->p->data=1;
printf("%d ",this->p->data);
}

intmain(void)
{
Bb;
b.f();

return0;
}

5. 談談基類指針對類的成員函數的訪問許可權問題

基類指針
對其自己的成員函數:隨便訪問
對子類成員函數:不可訪問(對於虛函數,都是子類的指針對子類重寫的新的虛函數的引用,或者未重寫時候,父類的虛函數的引用,父類即使用指針引了虛函數,也是引自己的)

6. 類的指針如何訪問類的引用

聲明:類名*對象指針名(point*ptr)
賦值:ptr=&p1(point p1)
訪問:對象指針名->成員名(ptr->data)
(*對象指針名).成員名

不知道你是不是問的這個東西?

7. 在c++中,類的靜態成員函數可以通過類的指針訪問類的非靜態數據成員嗎

可以的,不過要間接訪問。看下面的例子

#include<iostream>
usingstd::cout;
usingstd::endl;
classA{
intdata;
public:A(inti):data(i)
{
cout<<"new"<<endl;
};
A():data(0)
{
cout<<"newA"<<endl;
};
A(constA&a){
data=a.data;
cout<<"newA"<<endl;
};
~A()
{
cout<<"delete"<<endl;
};
staticvoidaccess(A*a)//靜態成員,參數為對象指針
{
a->data++;
cout<<a->data<<endl;//通過指針訪問內部非靜態對象;但不能用this指針直接來訪問
}
};

intmain()
{
Ab(2);
b.access(&b);//靜態成員函數訪問
return0;
}

8. 未初始化的類的指針可以訪問類的成員

其實,在調用類的成員函數時,默認會將this的值傳入第一個形參,這個參數主要是用來訪問類的成員變數的。

如果在成員函數的實現中,沒有引用任何成員變數(為對象分配的空間),使用空指針去調用都不會發生錯誤,因為在實現中你並未使用它。例如:

classB
{
public:
voidTest()
{
printf("運行時不會core掉 ");
}

voidTest2()
{
printf("運行下面的代碼時會報錯,因為引用成員變數時是基於0地址的 ");
a=100;
}

private:
inta;
};

intmain()
{
B*lpB=NULL;
lpB->Test();
lpB->Test2();

return0;
}

9. 為什麼一個類的空指針可以訪問類的成員函數

class MyClass{public:int i;void hello(){printf("hello/n");}void print(){printf("%d/n", i);}};void main(){MyClass* pmy = NULL;
pmy-hello();}看上面的這段代碼,似乎很詭異。 用一個空指針調用成員函數,簡直是天大的錯誤,可以遺憾的是,卻是可行的,至少對於上面的這段程序來說,不會照成錯誤。
之前運行的原因。
大家知道,每個對象,都有一個指向自己的this指針,這個指針的值,將會因為對象的不同而不同,它的作用主要就是用來區分不同的對象,這樣你就可以根據它
來訪問不同的對象的成員變數。然而,我們main函數中的hello函數並沒有使用類中的任何成員變數,所以,它也就不會用到this指針,此時的this指針是NULL。從而
我們就可以沒有障礙的使用hello函數,然而相對的是,如果你在pmy-hello()之後接著調用pmy-print(),那麼將會報空指針錯誤,因為這個函數試圖用this指針訪問成員變數i。

10. C++有關問題,基類的指針可以訪問訪問基類的虛函數嗎

沒說不可以訪問吧,

編譯報的錯是「rror C2259: 「A」: 不能實例化抽象類」

因為你的類A中有純虛函數,所以A也就是抽象類的,抽象類是不能定義對象的,你那對象a(main函數中的第一行)是不允許定義的。

證明A*的指針可以訪問A里的方法寫個函數就可以了,如下的編譯沒問題。:

voidRunT(A*p)
{
p->Show();
}
熱點內容
6s和安卓8哪個值得入手 發布:2025-07-23 23:03:31 瀏覽:765
巧妙運演算法 發布:2025-07-23 23:02:02 瀏覽:140
sql解析json 發布:2025-07-23 22:48:16 瀏覽:905
戰神解壓密碼 發布:2025-07-23 22:29:07 瀏覽:224
如何刷機安卓系統手機 發布:2025-07-23 22:28:56 瀏覽:739
麥咭編程下載 發布:2025-07-23 22:20:04 瀏覽:36
javadraw 發布:2025-07-23 22:19:59 瀏覽:629
忘記密碼去哪裡找回 發布:2025-07-23 22:19:06 瀏覽:748
php培訓技術 發布:2025-07-23 22:18:21 瀏覽:608
兒童速演算法 發布:2025-07-23 22:09:37 瀏覽:637