Передача объекта в класс по ссылке - PullRequest
0 голосов
/ 18 февраля 2012

Хорошо, я попытаюсь объяснить мое мышление здесь.У меня есть два класса на данный момент, известные как class1 и class2.Я хочу передать объект класса 2 в объект класса 1. по ссылке.

, но я хочу только передать его один раз, а не передавать его каждый раз, когда вызывается метод.

Я попытался создать указатель и попытался создать ссылку, но безрезультатно.Любая помощь приветствуется.

#include <iostream>

using namespace std;

class myclass
{
    private:
int i;

    public:
myclass()
{
}
void method()
{
    cout << "Enter num: ";
    cin >> i;
}
void display()
{
    cout << i;
}
};

class relatedclass
{

    public:

relatedclass(myclass ob)
{
    pmc = &ob;
}
myclass *pmc;

};

void main()
{
myclass mc;

relatedclass rc(mc);

//display value of mc.i
mc.display();
cout << endl;

//ok lets change the i variable
rc.pmc->method();
cout << endl;

//display new value of mc.i
mc.display();
cout << endl;
}

для даты теста, которую я ввел 50, и я ожидал, что объект mc будет обновлен, и теперь я буду равен 50.

Ответы [ 2 ]

1 голос
/ 18 февраля 2012
struct class2 {
  int i, j;
};
struct class1 {
  class2& c2;
  class1(class2& c2) : c2(c2) {}
  void Froz() {
    c2.i = c2.j;
  }
  int Baz() {
    return c2.i * c2.j;
  }
};

<ч /> EDIT : в вашем примере в конструкторе relatedclass вы берете адрес локальной переменной. Эта переменная будет уничтожена, когда конструктор вернется. После этого ваш указатель pmc указывает на уничтоженный объект, который является нет-нет.

Изменить эту строку:

relatedclass(myclass ob)

к этому

relatedclass(myclass& ob)
0 голосов
/ 18 февраля 2012

Вы можете хранить переменную-член class2 в class1, как это, и иметь переменную set, устанавливающую переменную-член.

#include <iostream>

using namespace std;

class class2 
{
public:
    int m_i;
};

class class1 
{
public:
    void set(class2& c2) { m_c2 = c2; };
    class2 m_c2;
};

void main()
{
    class2 c2;
    c2.m_i = 2;

    class1 c1;
    c1.set(c2);

    cout << c1.m_c2.m_i << std::endl;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...