64,643
社区成员
发帖
与我相关
我的任务
分享
struct s1
{
// ...
protected:
int impl( int i )
{
if ( i > 10 )
return method1(i);
return method2(i);
}
private:
int method1( int i )
{
return i*i;
}
int method2( int i )
{
return i+i;
}
};
struct s2 : private s1
{
// ...
protected:
int impl( int i )
{
if ( i < 100 )
return method1(i);
return method2(i);
}
private:
int method1( int i )
{
return s1::impl(i) * i;
}
int method2( int i )
{
return i*i*i;
}
};
struct s3: private s1, private s2
{
public:
int operator()( int i )
{
return impl( i );
}
protected:
int impl( int i )
{
if ( i & 1 )
return method1( i );
return method2( i );
}
private:
int method1( int i )
{
return s1::impl(i) * i;
}
int method2( int i )
{
return s1::impl(i) & s2::impl(i) ^ i;
}
};
int main()
{
int ans = s3()(10);
return ans;
}
struct s2 : virtual private s1
struct s3 : virtual private s1, virtual private s2
namespace
{
struct s1_proxy : public s1 { };
}
struct s3 : private s1_proxy, private s2
{
// ...
int method1( int i )
{
return s1_proxy::impl(i) * i;
}
int method2( int i )
{
return s1_proxy::impl(i) & s2::impl(i) ^ i;
}
};