0

how can it get acces to class members?

in this code the person class take an object of a birthday class as its parameter without asking for specific accces to one of its members or variables, and get access to three of its variables at once? why and how? https://code.sololearn.com/cHaz82lnpfAk/?ref=app

29th Apr 2021, 1:42 PM
‎Mmk
‎Mmk - avatar
17 ответов
0
It does, because it's not initialized with your constructor. As my answer stated, it's initialized with the copy constructor. Since you didn't define a copy constructor, the compiler generates one for you and call that one for the initialization of bd. Call counts: Your constructor: 1 Compiler generated copy constructor: 1
29th Apr 2021, 3:31 PM
你知道規則,我也是
你知道規則,我也是 - avatar
+ 2
You use a public method of the object birthday and this works. This is such as a getter. But example bb.day; cannot work.
29th Apr 2021, 1:57 PM
JaScript
JaScript - avatar
0
It did not have access to class member DIRECTLY. Person class accessed its VALUES through a public function Hope u get my point
29th Apr 2021, 1:54 PM
kris
kris - avatar
0
i understand but as long as i know to ge access i need to write "bb.month". why here it doesn't need it?
29th Apr 2021, 1:56 PM
‎Mmk
‎Mmk - avatar
0
when the person object is created, what exactly is happening with the bb parameter? the bb got created earlier, and now it just got called, without getting called of any of its members?
29th Apr 2021, 2:01 PM
‎Mmk
‎Mmk - avatar
0
bb.month would get the value of variable month and assigned to an another int variable Int m = bb.month; In this example it can't be done like that because of the variable month being private That's why a public function is created in birthday class to PRINT (and not access it DIRECTLY) the value of its variables.
29th Apr 2021, 2:02 PM
kris
kris - avatar
0
When Person object p is created, It call it constructor Constructor calls object bb of birthday class Bb calls its constructor in which the numbers are passed
29th Apr 2021, 2:05 PM
kris
kris - avatar
0
shouldn't the constructor work only when it's created, which happend in the line 35?
29th Apr 2021, 2:10 PM
‎Mmk
‎Mmk - avatar
0
Yes it did work then that object is passed as parameter to person object
29th Apr 2021, 2:17 PM
kris
kris - avatar
0
im sorry i still dont understand.
29th Apr 2021, 2:19 PM
‎Mmk
‎Mmk - avatar
0
Person has a Birthday member named bd, which stores a copy of parameter b from Person(string n, Birthday b). Why is it stored is that you use member initializer-list. You see, bd is a 'public' member. Birthday has a 'public' constructor. Person.printinfo() is 'public'. Inside of it a 'public' method from Birthday class, printDate(), is called. Every processes is public, meaning the process can be used by everyone.
29th Apr 2021, 2:39 PM
你知道規則,我也是
你知道規則,我也是 - avatar
0
1.in the line 22 the bd object that just got created, take one parameter instead of three, how does it work? 2. that only parameter include one constructor one function and three variables, why that parameter give only the three variables?
29th Apr 2021, 2:46 PM
‎Mmk
‎Mmk - avatar
0
1. It stores the copy of the parameter. It's as same as Birthday bd = b; In that sense, everything in b is copied to bd. it looks natural and straight forward, doesn't it? 2. Except the constructor doesn't appears to belong to the class since that quite doesn't make sense to construct an object by another object, the other methods are still copied to the object, or why can you access it in printinfo()?
29th Apr 2021, 2:56 PM
你知道規則,我也是
你知道規則,我也是 - avatar
0
when the bb is copied to bd, by taking it as its parameter, does the bd skip on its constructor, and copy the variables directly? if not, how does exactly that constructor work in this case?
29th Apr 2021, 3:05 PM
‎Mmk
‎Mmk - avatar
0
If you don't know, there are actually 3 types of constructors the compiler can 'generate' for you. 1. Default constructor - takes nothing and does nothing. This explain why you can create an object of class A which is defined as class A { }; 2. Copy constructor It defined how the object is initialized with another object (define A a = b where b is an object of class A) You can make a user-defined copy constructor with the following: A(const A& a); Note neither const or & can be omit, or it will just be another constructor rather than the copy one. 3. Move constructor (C++11) Move constructor is more complicated (in my opinion) compare to the others. Rather than making an object from parameters or other object, you 'move' an object to the other object. But since your code doesn't involve it. I'm just going to mention it. If you find C++ interesting you can search it yourself. So why does your code work? Because a compiler generates a copy constructor for your class. Just that simple.
29th Apr 2021, 3:16 PM
你知道規則,我也是
你知道規則,我也是 - avatar
0
i understand that it copies directly the object, and doesn't copy the variables one by one. but does it skip on that line? (int m, int d, int y) : month(m),day(d), year(y)
29th Apr 2021, 3:27 PM
‎Mmk
‎Mmk - avatar
0
thank you
29th Apr 2021, 3:34 PM
‎Mmk
‎Mmk - avatar