簡體   English   中英

C ++傳遞指針參考

[英]C++ passing pointer reference

我想通過引用將指針對象傳遞給函數。 我不知道我做的是否正確,因為它無法按照以下代碼運行。 請幫我。

class Base
{
    public:  
    int x;
    void print()// function prints x value
    {
        cout<<x;
    }
    void call_print(Base **base) //function call print function
    {
        base->print();
    }
};
int main()
{
    Base *b = new Base; // creating pointer object
    b->call_print(&b); // passing pointer by reference
    return 0;
}

你通過,你仍然必須通過參數訪問原始對象,但要注意意義上的“引用”傳遞對象basecall_print()是一個指向對象的指針傳遞中,而不是實際的對象。 如果要訪問傳入的對象,仍然必須取消引用指針:

(*base)->print();

C ++引入了實際的引用,這些引用是語法上與指針/雙指針有關的內容。 例如:

void call_print(Base*& base)
{ base->print(); }

b->call_print(b);

另外,似乎不需要使用雙指針或引用,因為您無需以任何方式修改指針。 為什么不只使用指針本身呢?

void call_print(Base* base)
{ base->print(); }

b->call_print(b);

最后,您不需要將b作為參數傳遞給它自己的方法。 可以通過this方式訪問指向Base對象的指針:

void call_print()
{
    print(); /* or this->print() */
}

b->call_print();

一個簡單的注釋:不要使用裸露的指針,要利用C ++ 11的功能:std :: unique_ptr和std :: shared_ptr更好,出於資源管理的考慮,您可以編寫如下代碼:

std::unique_ptr<Base> base_ptr(new Base());
base_ptr->call_print();
//no delete, unique_ptr deletes itself automatically

對於基類,您必須編寫:

void call_print() //function call print function
{
    this->print();
}

因為您不需要傳遞給同一對象,即對自身的引用。

#include <iostream>
using namespace std;
class Base
{
    public:  
    int x;
    void print()
    {
        cout<<x<<endl;
    }
};
class Base2
{
    public:
    void change_value(Base *&base) 
    {
        base->x = 5;
    }
};
int main()
{
    Base *b = new Base;
    Base2 b2;
    b2.change_value(b);
    b->print();
    delete b;
    return 0;
}

暫無
暫無

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

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