假设我有一个名为foo的类,主要包含用于显示数据的数据和类栏。因此,如果我有foo的对象实例名为foobar,我将如何将其传递到bar :: display()?像空栏::显示(foobar& test)?
答案 0 :(得分:9)
是的,差不多。或者,如果可能的话,使用const引用来表示该方法不会修改作为参数传递的对象。
class A;
class B
{
// ...
void some_method(const A& obj)
{
obj.do_something();
}
// ...
};
答案 1 :(得分: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 ;
}
希望这有帮助。
答案 2 :(得分:0)
所以有两种方法可以将类对象(这是你要问的)作为函数参数传递 i)将对象的副本传递给函数,这样如果对象中的函数所做的任何更改都不会反映在原始对象中
ii)将对象的基地址作为参数传递给函数。在thsi方法中,如果调用函数对对象进行了任何更改,它们也将反映在orignal对象中。
例如查看this link,它清楚地展示了传递值的用法以及通过引用传递,在Jim Brissom的回答中清楚地证明了这一点。