又发现VS2005中与标准C++不符的一个地方!该怎么处理
又发现VS2005中与标准C++不符的一个地方!!
using namespace std;
class Base
{
public:
void print(string str) const{cout < <str < <endl;}
};
class Derived1:public Base
{
public:
void print(int) const{}
};
class Derived2:public Base
{
public:
void print(double) const{}
};
class MI:public Derived1,public Derived2
{
public:
void print(complex <double> )const{}
};
int main()
{
MI mi;
string dancer( "Njingky ");
mi.Base::print(dancer);//此处应该出错
return 0;
}
按《C++ Primer》的说法,Base不是MI的直接基类,上面标记处应该出错(已在DEVCPP下验证),但在VS2005下正常。
VS2005是怎么做到的呢?怎么看汇编代码?
------解决方案--------------------
VC也真牛,不明确的基类调用也让过。
------解决方案--------------------
这是.NET的能力
其实.NET都不想支持多继承了
------解决方案--------------------
VS2005还支持很多非标准的东西呢...
比如:
template <...>
class a{
...
template <...>
class b{};
template <>
class b <...> {}
};
不过我倒觉得这个特性很不错.呵呵.
至于楼主的东西,是有点问题.不过可能是VC把这种继承默认做为虚继承了吧.毕竟,在通常的应用中,基本上只需要这种模型.
using namespace std;
class Base
{
public:
void print(string str) const{cout < <str < <endl;}
};
class Derived1:public Base
{
public:
void print(int) const{}
};
class Derived2:public Base
{
public:
void print(double) const{}
};
class MI:public Derived1,public Derived2
{
public:
void print(complex <double> )const{}
};
int main()
{
MI mi;
string dancer( "Njingky ");
mi.Base::print(dancer);//此处应该出错
return 0;
}
按《C++ Primer》的说法,Base不是MI的直接基类,上面标记处应该出错(已在DEVCPP下验证),但在VS2005下正常。
VS2005是怎么做到的呢?怎么看汇编代码?
------解决方案--------------------
VC也真牛,不明确的基类调用也让过。
------解决方案--------------------
这是.NET的能力
其实.NET都不想支持多继承了
------解决方案--------------------
VS2005还支持很多非标准的东西呢...
比如:
template <...>
class a{
...
template <...>
class b{};
template <>
class b <...> {}
};
不过我倒觉得这个特性很不错.呵呵.
至于楼主的东西,是有点问题.不过可能是VC把这种继承默认做为虚继承了吧.毕竟,在通常的应用中,基本上只需要这种模型.