大家來找Bug, 有意思的程式問題?
Q1: 下列那邊有問題?
class A
{
A(){};
protected:
double _a;
public:
A(double a) : _a(a) {}
double eval(double a1)
{
return _a * a1;
}
virtual ~A(){}
};
class B : public A
{
public:
double eval( double b )
{
_a = _a * b;
return _a;
}
};
class C
{
public:
C() : _myA(0) {}
double _a;
A* _myA;
~C()
{
if ( _myA != 0 )
delete _myA;
}
};
class D : public A, public C
{
public:
int run(double d) { return d + _a; }
};
Q2:以下找出錯誤跟可能的危險
void main()
{
A* testB = new B;
double testVal = b.eval( 4.0 );
C testC;
testC._myA = new A(4);
C testC2 = testC;
D testD;
int testVal2 = testD.run( 3.0 );
delete testB;
}
Q3:以下程式那邊造成complier有問題? 可以保留SetValue的Const-ness嗎? 如果可以,怎麼修改?
class cTest
{
public:
cTest(){};
~cTest(){};
void SetValue( const double val ) const
{
m_value = val;
}
private:
double m_value;
};
Q4:以下程式是否有memory leak問題, 如果有,怎麼避免?
class cTest
{
public:
cTest(){};
~cTest(){};
private:
double m_double[100];
};
void function( cTest* test )
{
delete test;
test = new cTest();
}
void main( void )
{
cTest *t = new cTest();
function( t );
delete t;
}