簡體   English   中英

指向C ++中對象的指針

[英]Pointer to object in C++

我在Stackoverflow.com看到了以下代碼。 我一直在尋找相同的代碼,因為我對此表示懷疑。 如果我們看到以下代碼
CRectangle r1, *r2; r2= new CRectangle;
1.我們為什么要做new CRectangle 實際上我們正在嘗試做什么?

  1. 一位同事告訴我,當我們編寫自己編寫的代碼時,
    CRectangle *r2 = 0;

然后,我們使用其他值或地址進行initialize 我真的很困惑。 請幫我。

using namespace std; 
class CRectangle
{
    int width, height;  
public:    
    void set_values (int, int);  
    int area (void) {return (width * height);
    } 
}; 
void CRectangle::set_values (int a, int b) 
{    
    width = a;   
    height = b;
} 
int main () 
{   
    CRectangle r1, *r2;    
    r2= new CRectangle;    
    r1.set_values (1,2);  
    r2->set_values (3,4);   
    cout << "r1.area(): " << r1.area() << endl;    
    cout << "r2->area(): " << r2->area() << endl;  
    cout << "(*r2).area(): " << (*r2).area() << endl;  
    delete r2;    
    return 0; 
} 

C矩形r1,* r2; r2 =新的CRectangle;

r1是對象。 r2是指向對象的指針。

CRectangle *r2 = 0;

指針包含對象的地址。 如果指針尚未初始化,則它可以具有任何值(我們不知道)。 因此,我們初始化0以便我們知道指針的值為0 我們可以使用該值來避免兩次初始化或某些內存錯誤。

當我們將對象分配給指針時,通常要做的是

if (r2 == 0)
    r2 = new CRectangle;
else
    std::cout << "Pointer is not empty or invalid" << std::endl;

在您的示例中, r1具有CRectangle類的類型,但是r2具有指向CRectangle類的指針的類型。 指針只是全局內存( )中的地址。 為了將內存分配和標記為CRectangle對象,我們需要使用new

請閱讀書中的詳細信息

CRectangle r1, *r2;    
r2= new CRectangle;

此代碼聲明一個CRectangle對象( r1 ),以及一個指向CRectangle對象的指針,該指針尚未指向任何內容( r2 )。 這兩個變量都分配在堆棧上。

第二行(從堆中)為新的CRectangle對象分配內存,調用該類的任何構造函數,然后返回地址並將其分配給r2 因此, r2然后指向一個CRectangle對象。

r2設置為0或NULL只是指示指針實際上沒有指向任何內容的標准方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM