我出的C++试题

一、问答题

1.请说明类的纯虚函数、虚函数、静态成员函数、普通成员函数的区别。

2.什么情况下,类的析构函数应该声明为虚函数?为什么?

3.对于下面的代码:

class  myString;
myString 
* pStringArray  =   new  myString[ 13 ];

以下两种delete有什么区别?

delete pStringArray;
delete []pStringArray;

 二、说明题

下列题目,请写出输出结果,并要求说明原因。

4.下面的函数调用输出什么?

void  Test()
{
    
char   * =   " Test " ;

    cout 
<<   & <<  endl;
    cout 
<<  p  <<  endl;
    cout 
<<   * <<  endl;
    cout 
<<  p[ 0 <<  endl;

    
void   * =   " Test " ;

    cout 
<<   & <<  endl;
    cout 
<<  q  <<  endl
}

5.有如下的类:

class  CBase
{
public :
     
virtual   void  Test()  const  { cout  <<   " Output from CBase! "   <<  endl; };
};

class  CDerived :  public  CBase
{
public :
     
virtual   void  Test()  const  { cout  <<   " Output from CDerived! "   <<  endl; };
};

下面是两个函数:

void  Test1(CBase test)
{
     test.Test();
}

void  Test2( const  CBase &  test)
{
     test.Test();
}

请问调如下的函数输出什么?

void  Test()
{
    CDerived oTest;

    Test1(oTest);

    Test2(oTest);
}

6.有如下的类:

class  B
{
public :
    B() { cout 
<<   " Output from the constructor of class B! "   <<  endl; }
    
~ B() { cout  <<   " Output from the destructor of class B! "   <<  endl; }
};

class  D1 :  public  B
{
public :
    D1(
int  n) { cout  <<   " The integer value is:  "   <<  n  <<  endl; };
    
~ D1() { cout  <<   " Output from the destructor of class D1! "   <<  endl; };
};

class  D2 :  public  B
{
public :
    D2(
int  n) { cout  <<   " The integer value is:  "   <<  n  <<  endl; };
    
~ D2() { cout  <<   " Output from the destructor of class D2! "   <<  endl; };
};

class  CTest
{
public :
    CTest() : d2(
2 ), d1( 1 ) {};
    
~ CTest() {};

private :
    D1 d1;
    D2 d2;
};

请问调如下的函数输出什么?

void  Test()
{
    CTest test;
}


7.有如下的类:

class  CBase
{
public :
     
virtual   void  Test()  const  { cout  <<   " Output from CBase! "   <<  endl; };
};

class  CDerived :  public  CBase
{
public :
     
void  Test()  const  { cout  <<   " Output from CDerived! "   <<  endl; };
};

请问调如下的函数输出什么?

void  Test()
{
    CDerived  d;

    CBase 
* pB  =   & d;
    pB
-> Test();

    CDerived  
* pD  =   & d;
    pD
-> Test();
}

8.如果把上题中类CBase的Test方法改为非虚函数,输出又是什么?

9.有如下的类:

class  CBase
{
public :
    
virtual   void  Test( int  iTest  =   0 const    =   0 ;
};

class  CDerived :  public  CBase
{
public :
     
void  Test( int  iTest  =   1 const  { cout  <<  iTest  <<  endl; };
};

请问调如下的函数输出什么?

void  Test()
{
    CBase 
* =   new  CDerived;

    p
-> Test();
 
    delete p;
}

三、分析题

有如下的复数类:

class  complex
{
public :
    complex(
double  r  =   0.0 double  i  =   0.0 ) { re  =  r; im  =  i; };

    
double  real()  const  {  return  re; };
    
double  image()  const  {  return  im; };

private :
    
double  re;
    
double  im;
};

complex 
operator + ( const  complex &  left,  const  complex &  right)

    
return  complex(left.real()  +  right.real(), left.image()  +  right.image()); 
}

complex 
operator * ( const  complex &  left,  const  complex &  right) 

    
return  complex(left.real() * right.real()  -  left.real() * right.image(), left.real() * right.image()  +  left.image() * right.real()); 
}

请分析:

10.没有把运算符重载设置为类的成员函数有什么好处?

11.能不能把函数参数前面的const去掉?为什么?

12.类的成员函数real()和image()后面的const表示什么?这样写有什么好处?

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值