1

Вопрос по c++ – Вызов конструктора класса внутри другого класса

На следующей неделе у меня тест на c ++, и я готовлюсь к нему. Я запутался, когда у меня есть 2 класса, как показано ниже. Мне нужно пройтись по исполнению кода построчно, и я запутался в отмеченных строках (x = ... а такжеy = ... внутриclass two) - куда идет исполнение?

#include <iostream>
using namespace std;

class one {
    int n;
    int m;
    public:
    one() { n = 5; m = 6; cout << "one one made\n"; }
    one(int a, int b) {
        n = a;
        m = b;
        cout << "made one one\n";
    }
    friend ostream &operator<<(ostream &, one);
};

ostream &operator<<(ostream &os, one a) {
    return os << a.n << '/' << a.m << '=' <<
        (a.n/a.m) << '\n';
}

class two {
    one x;
    one y;
    public:
    two() { cout << "one two made\n"; }
    two(int a, int b, int c, int d) {
        x = one(a, b);  //here is my problem
        y = one(c, d);  //here is my problem
        cout << "made one two\n";
    }
    friend ostream &operator<<(ostream &, two);
};

ostream &operator<<(ostream &os, two a) {
    return os << a.x << a.y;
}

int main() {
    two t1, t2(4, 2, 8, 3);
    cout << t1 << t2;
    one t3(5, 10), t4;
    cout << t3 << t4;
    return 0;
}
  • Error: User Rate Limit ExceededtwoError: User Rate Limit Exceededt2) x=one(4,2)Error: User Rate Limit Exceededy=one(8,3)Error: User Rate Limit ExceededxError: User Rate Limit ExceededyError: User Rate Limit Exceededt1Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceededx.nError: User Rate Limit Exceededa, x.mError: User Rate Limit Exceededb, y.nError: User Rate Limit ExceededcError: User Rate Limit Exceededy.mError: User Rate Limit Exceededd.

    от
  • Error: User Rate Limit Exceeded

    от Jack
  • Я делаю работу над листом бумаги, и мне нужно пройти программу.

    от Jack
  • Что вы имеете в виду "когда я добираюсь до"? и "куда идти"? Вы пытаетесь отслеживать выполнение программы построчно?

    от Cascabel
  • когда я доберусь до х = один (а, б); Я не знаю, куда идти после этого.

    от Jack
  • В чем твоя проблема? Что ты пытаешься сделать?

    от Cascabel
  • 3

    с линии он прыгает на линию и выполняет параметризованный конструктор

    с линииx = one(a, b); он прыгает на линию one(int a, int b) и выполняет параметризованный конструкторone

    то же самое для линииy = one(c, d);

  • 3

    Этот код делает то, что он вызывает конструктор класса

    x = one(a, b);  //here is my problem
    y = one(c, d);  //here is my problem
    

    one и назначает вновь созданный экземпляр этого класса переменнымx а такжеy.

    Конструктор классаone в строке 9.

  • 1

    Текущий подход работает

    только если у вас есть конструктор по умолчанию в одном классе. Лучше инициализировать элементы в списке инициализации конструктора:

    two(int a, int b, int c, int d) 
        : x(a,b), y(c,d)
    {
            cout << "made one two\n";
    }