0

Помогите разобраться что есть что

Добрый день товарищи. Играл в поединках, попадаются задания(коды) которые вообще не умею читать. Решил понять что есть что и как оно работает. Что есть что врое бы понял насколько это возможно, но как работает и что происходит в программе вообшще не понимаю. Парень я не глупый, хоть и новичек, но жажду знаний и понимания материала, помогите с объяснениями насколько возможно) правильно я думаю? class A{ //класс А public: int a; //объявляется переменная !внутри класса! A() {a=0;} //Метод a в классе А A(int b){a=b+1;} //Метод A в классе А с переменной b }; class B{ public: A a; // объект а класса А B(): a(0){} //Метод B(конструктор) инициализирует метод a со значением (0) }; int main(){ B *b = new B(); // создаётся объект класса B в куче cout << b->a.a; // b указывает на адрес метода a объекта а } //Вывод "1"

15th Nov 2017, 6:08 PM
Александр
4 odpowiedzi
+ 1
я не гуру в С++, попробую объяснить. A(){a=0;} - constructor (same name as class) A(int b){a=b+1;} - another constructor, первый конструктор "включается", без аргументов, второй - при подаче целого числа на вход конструктора. дальше трюк. B():a(0){} - конструктор, который наследует из класса А (это ":" нам говорит), и запускает второй конструктор, а именно {a=b+1}, так как на входе 0 - число. т.е. переменная а = 1. ну и далее по тексту.
18th Nov 2017, 8:32 PM
yuri
+ 1
b заведен как адрес( *b) на объект класса В: B *b = new B(); это запускает В конструктор, и создаёт переменную а в объекте а, т.е. а.а, ну и чтобы адрес получил доступ, используется оператор ->, в результате имеем b->a.a
19th Nov 2017, 9:44 AM
yuri
0
спасибо! а что же такое b->a.a?
19th Nov 2017, 6:27 AM
Александр
0
Так, примерно понятно. спасибо!
19th Nov 2017, 1:24 PM
Александр