prog16.cpp

来自「C++语言程序设计题典」· C++ 代码 · 共 86 行

CPP
86
字号
#include <iostream.h>
class base      //虚基类
{
private:
	int m,n;
public:
	base(int p1,int p2)
	{
		m=p1;n=p2;
	}
	int inc1() { return ++m; }
	int inc2() { return ++n; }
	void disp()
	{
		cout << "m=" << m << ",n=" << n << endl;
	}
};
class derive1:virtual private base   //从虚基类派生
{
private:
	int i;
public:
	derive1(int p1,int p2,int p3):base(p1,p2)
	{
		i=p3;
	}
	int inc1() { return base::inc1(); }
	int inc3() { return ++i; }
	void disp()
	{
		base::disp();
		cout << "i=" << i << endl;
	}
};
class derive2:virtual public base   //从虚基类派生
{
private:
	int j;
public:
	derive2(int p1,int p2,int p4):base(p1,p2)
	{
		j=p4;
	}
	int inc1()
	{
		base::inc1();
		base::inc1();
		return base::inc1();
	}
	int inc4() { return ++j; }
	void disp()
	{
		base::disp();
		cout << "j=" << j << endl;
	}
};
class derive12:private derive1,public derive2
{
private:
	int k;
public:
	derive12(int p11,int p12,int p13,int p21,int p22,int p23,int p)
		:derive1(p11,p12,p13),derive2(p21,p22,p23),base(p11,p21)
	{
		k=p;
	}
	int inc1() { return base::inc1(); }
    int inc5() { return ++k; }
	void disp()
	{
		cout << "derive1::disp()" << endl;
		derive1::disp();
		cout << "derive2::disp()" << endl;
		derive2::disp();
		cout << "k=" << k << endl;
	}
};
void main()
{
	derive12 d(10,20,30,40,50,60,70);
	d.disp();
	d.inc1();
	d.derive2::inc1();
	d.disp();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?