- 论坛徽章:
- 24
|
回复 #102 Pervise 的帖子
原帖由 Pervise 于 2007-9-17 20:34 发表 ![]()
在每一个O里加入同一行为,通过访问O12触发这个行为,进而按从上到下、从左到右的顺序,不可重入地,调用每一个O的同一行为。看你怎么实现?
是要这个么?
#include <iostream>
class O1
{
public:
int a1;
void show () { std::cout << "O1" << std::endl; };
};
class O2 :virtual public O1
{
public:
int a2;
void show () { std::cout << "O2" << std::endl; };
};
class O3 :virtual public O1
{
public:
int a3;
void show () { std::cout << "O3" << std::endl; };
};
class O4 :virtual public O1
{
public:
int a4;
void show () { std::cout << "O4" << std::endl; };
};
class O5 :virtual public O2
{
public:
int a5;
void show () { std::cout << "O5" << std::endl; };
};
class O6 :virtual public O2, virtual public O3
{
public:
int a6;
void show () { std::cout << "O6" << std::endl; };
};
class O7 :virtual public O3, virtual public O4
{
public:
int a7;
void show () { std::cout << "O7" << std::endl; };
};
class O8 :virtual public O4
{
public:
int a8;
void show () { std::cout << "O8" << std::endl; };
};
class O9 :virtual public O5, virtual public O6
{
public:
int a9;
void show () { std::cout << "O9" << std::endl; };
};
class O10 :virtual public O6, virtual public O7
{
public:
int a10;
void show () { std::cout << "O10" << std::endl; };
};
class O11 :virtual public O7, virtual public O8
{
public:
int a11;
void show () { std::cout << "O11" << std::endl; };
};
class O12 :virtual public O9, virtual public O10, virtual public O11
{
public:
int a12;
void show () { std::cout << "O12" << std::endl; };
void show_all();
};
void O12::show_all()
{
O1::show();
O2::show();
O3::show();
O4::show();
O5::show();
O6::show();
O7::show();
O8::show();
O9::show();
O10::show();
O11::show();
O12::show();
}
int main(int argc, char *argv[])
{
O12 *p_12;
p_12 = new O12;
p_12->a1 = 1;
p_12->a2 = 2;
p_12->a3 = 3;
p_12->a4 = 4;
p_12->a5 = 5;
p_12->a6 = 6;
p_12->a7 = 7;
p_12->a8 = 8;
p_12->a9 = 9;
p_12->a10 = 10;
p_12->a11 = 11;
p_12->a12 = 12;
std::cout << "p_12->a1 = " << p_12->a1 << std::endl;
std::cout << "p_12->a7 = " << p_12->a7 << std::endl;
std::cout << "p_12->a9 = " << p_12->a9 << std::endl;
std::cout << "p_12->a12 = " << p_12->a12 << std::endl;
p_12->show_all();
delete p_12;
return 0;
}
|
|
|