#include<iostream>
using namespace std;
class Parent{
int i;
public:
Parent(int ii):i(ii){
cout<<"Parent(int ii)"<<endl;
}
Parent(const Parent& b):i(b.i){
cout<<"Parent(const Parent&)"<<endl;
}
Parent():i(0){
cout<<"Parnet()"<<endl;
}
friend ostream& operator<<(ostream& os,const Parent& b)
{
return os<<"Parent: "<<b.i<<endl;
}
};
class Member{
int i;
public:
Member(int ii):i(ii){
cout<<"Member(int ii)"<<endl;
}
Member(const Member& b):i(b.i){
cout<<"Member(const Member& b)"<<endl;
}
Member():i(0){
cout<<"Member()"<<endl;
}
friend ostream& operator<<(ostream& os,const Member& b){
return os<<"Member: "<<b.i<<endl;
}
};
class Child : public Parent{
int i;
Member m;
public:
Child(){}
Child(int ii):Parent(ii),i(ii),m(ii){
cout<<"Child(int ii) "<<endl;
}
friend ostream& operator<<(ostream& os,const Child& c)
{
return os<<(Parent&)c<<c.m<<"Child "<<c.i<<endl;
}
/*Child& operator=(const Child& a){
cout<<"Calling assignment function"<<endl;
if(&a==this){
return *this;
}
i=4;
return *this;
}*/
};
int main()
{
Child c(2);
cout<<"Calling copy-constructor"<<endl;
Child c2(c);
cout<<"value in c2\n"<<c2;
return 0;
}