w********s 发帖数: 1570 | 1 很多stl的问题,主要是std::remove_if之类的
还有语法问题主要是考exception, 继承
举个例子,
class A
{
virtual void f() throw (int, double, long) = 0;
}
class B
{
int f();//1
int f() throw(int);//2
void f() throw(double, long, int);//3
void f();//4
void f() throw(long);//5
}
哪些是对的 | c*******r 发帖数: 610 | | w********s 发帖数: 1570 | | c*******r 发帖数: 610 | 4 下面是我的答案,如果有错误,请指正:)
class A
{
virtual void f() throw (int, double, long) = 0;
}
class B :public A (假设)
{
int f();//1
int f() throw(int);//2
void f() throw(double, long, int);//3
void f();//4
void f() throw(long);//5
}
应该是1,2,4,5不对(如果1-5同时出现就都不对了),因为这几个函数都在一个类(
public 继承,因此也包含基类的void f() =0),是overloading,不能依靠return
type 和exception specification 来区别,所以compile time error
如果Class B里面只有3,那么是可以的,或者只有5也可以,只有4 不行,因为4可以抛
出任何异常,但是基类的函数只能抛出int, long, double,只有1或者2也不行。 | S**I 发帖数: 15689 | 5 2, 3 and 5 are correct
【在 w********s 的大作中提到】 : 很多stl的问题,主要是std::remove_if之类的 : 还有语法问题主要是考exception, 继承 : 举个例子, : class A : { : virtual void f() throw (int, double, long) = 0; : } : class B : { : int f();//1
|
|