#include <iostream>
using namespace std;
class A
{
public:
int a;
A(int a):a(a)
{}
};
class B:virtual public A
{
public:
int b;
B(int a,int b):A(a),b(b)
{}
};
class C:virtual public A
{
public:
int c;
C(int a,int c):A(a),c(c)
{}
};
//汇集子类
class D:public B,public C
{
public:
int d;
D(int a,int b,int c):A(a),B(a,b),C(a,c)
{}
};
int main()
{
//实例化汇集子类D的类对象
D d1(1,2,3);
d1.a = 90; //对于公共基类继承加上virual后,在汇集子类中只能找到一个属性a
cout << d1.a <<endl;
d1.B::A::a = 80;
cout << d1.a <<endl;
return 0;
}
2
#include <iostream>
using namespace std;
class Father
{
public:
int *p;
const string name;
Father(string name):name(name),p(new int(1))
{cout<<"f有参构造"<<endl;}
Father():name("fff"),p(new int(1))
{cout<<"f无参构造"<<endl;}
~Father()
{
cout <<"析构函数"<<endl;
delete(p);
}
Father(const Father &other):name(other.name),p(new int(*(other.p)))
{cout<<"f拷贝构造"<<endl;}
Father &operator=(Father &other)
{
this->p=other.p;
cout << "f拷贝赋值函数" <<endl;
return *this;
}
};
class Son:public Father
{
public:
int *age;
Son(int age):Father(),age(new int(age))
{}
Son():Father(),age(new int(1))
{}
~Son()
{
delete age;
}
Son(Son &other):Father(other),age(new int(*(other.age)))
{}
Son &operator=(Son &other)
{
Father::operator=(other);
this->age=other.age;
return *this;
}
};
int main()
{
Son s1(2);
Son s2;
s2=s1;
return 0;
}