2010-12-29 13 views
4

fooという名前のクラスがあり、そのデータを表示するために使用されるほとんどのデータとクラスバーが含まれているとします。 foob​​arという名前のfooのオブジェクトインスタンスがある場合、bar :: display()にどのように渡しますか? void bar :: display(foobar &テスト)のようなもの?C++でクラスオブジェクトを引数として渡す

答えて

9

はい、ほぼあります。または、可能であれば、const参照を使用して、メソッドが引数として渡されたオブジェクトを変更しないことを通知します。

class A; 

class B 
{ 
    // ... 
    void some_method(const A& obj) 
    { 
     obj.do_something(); 
    } 
    // ... 
}; 
1
#include <iostream> 

class Foo 
{ 
    int m_a[2]; 

    public: 
    Foo(int a=10, int b=20) ;   
    void accessFooData() const; 

}; 

Foo::Foo(int a, int b) 
{ 
    m_a[0] = a; 
    m_a[1] = b; 
} 

void Foo::accessFooData() const 
{ 
    std::cout << "\n Foo Data:\t" << m_a[0] << "\t" << m_a[1] << std::endl; 
} 

class Bar 
{ 
    public: 
    Bar(const Foo& obj); 
}; 

Bar::Bar(const Foo& obj) 
{ 
    obj.accessFooData(); 
    // i) Since you are receiving a const reference, you can access only const member functions of obj. 
    // ii) Just having an obj instance, doesn't mean you have access to everything from here i.e., in this scope. It depends on the access specifiers. For example, m_a array cannot be accessed here since it is private. 
} 

int main(void) 
{ 
    Foo objOne; 
    Bar objTwo(objOne) ; 
    return 0 ; 
} 

この情報がお役に立てば幸いです。

0

したがって、クラスオブジェクト(それはあなたが求めているもの)を関数の引数として渡す方法は2種類あります。 i)関数によって変更があった場合、この方法でオブジェクトのコピーを関数に渡しますオブジェクトの元のアドレスを元のオブジェクトに反映させません。

ii)関数の引数としてオブジェクトのベースアドレスを渡します。呼び出し元関数によってオブジェクトに変更が加えられた場合、thsiメソッドでは、もともとオブジェクトに反映されます。

たとえば、this linkをご覧ください。これは、値渡しの使用方法を明確に示しており、参照渡しはJim Brissomの回答で明確に示されています。

関連する問題