C++ rtmp livestream 流媒体

海阔天空 张翼飞翔

我的学习笔记。--我喜欢这里,因为这里安静,无广告骚扰。
随笔 - 82, 文章 - 2, 评论 - 126, 引用 - 0
数据加载中……

C++笔试题

一 判断输出

#include  < iostream >
using namespace std;


Fun(
int   & n)
{
    printf(
" %d,  " , ++ n);
    
if  (n == 11 )
    
{
        
return   1 ;
    }

    
return   0 ;
}


void  main()
{
    
int  n = 10 ;
    printf(
" %d, %d, %d\n " ,n ++ ,n ++ ,n ++ );   // 10,10,10
    n = 10 ;
    printf(
" %d, %d, %d\n " , ++ n, ++ n, ++ n);  // 13,12,11            
    n = 10 ;
    cout
<< n ++<< " " << n ++<< " " << n ++<< endl; // 12, 11, 10
    n = 10 ;
    cout
<<++ n << " " <<++ n << " " <<++ n << endl; //  13, 12, 11
    n = 10 ;
    
if  (Fun(n)  &&  Fun(n)  &&  Fun(n)) {}
    cout
<< n << endl;                 //  11,12,12
}


二,String类的编写
这是一个常见的c++面试题,已经不知道出处了,

assert(m_data != NULL);   
class  String
{      
public :      
   String(
const   char   * str  =  NULL);  //  普通构造函数    
   String( const  String  & other);  //  拷贝构造函数   
    ~  String( void );  //  析构函数 
   String  &  operate  = ( const  String  & other);  //  赋值函数      
private :     
   
char   * m_data;  //  用于保存字符串      
}
;

// 普通构造函数
String::String( const   char   * str)
{
        
if (str == NULL)
        
{
                m_data 
=   new   char [ 1 ];  //  得分点:对空字符串自动申请存放结束标志'\0'的空
                                              
// 加分点:对m_data加NULL 判断assert(m_data != NULL);    
                 * m_data  =   ' \0 ' ;
        }
    
        
else
        
{
         
int  length  =  strlen(str);
         m_data 
=   new   char [length + 1 ];  //  若能加 NULL 判断则更好 
         strcpy(m_data, str);
        }

}


//  String的析构函数
String:: ~ String( void )
{
        delete [] m_data; 
//  或delete m_data;
}

// 拷贝构造函数
String::String( const  String  & other)     //  得分点:输入参数为const型
{     
        
int  length  =  strlen(other.m_data);
        m_data 
=   new   char [length + 1 ];      // 加分点:对m_data加NULL 判断  assert(m_data != NULL);     
        strcpy(m_data, other.m_data);    
}


// 赋值函数
String  &  String::operate  = ( const  String  & other)  //  得分点:输入参数为const型
{     
        
if ( this   ==   & other)                     // 得分点:检查自赋值
                 return   * this ;   
        delete [] m_data;                
// 得分点:释放原有的内存资源
         int  length  =  strlen( other.m_data );      
        m_data 
=   new   char [length + 1 ];   // 加分点:对m_data加NULL 判断 assert(m_data != NULL);    
        strcpy( m_data, other.m_data );   
        
return   * this ;              // 得分点:返回本对象的引用
}

剖析:

能够准确无误地编写出String类的构造函数、拷贝构造函数、赋值函数和析构函数的面试者至少已经具备了C++基本功的60%以上!

在这个类中包括了指针类成员变量m_data,当类中包括指针类成员变量时,一定要重载其拷贝构造函数、赋值函数和析构函数,这既是对C++程序员的基本要求,也是《Effective C++》中特别强调的条款。

三、实现strcpy函数
已知strcpy函数的原型是: 
       char * strcpy(char * strDest,const char * strSrc); 
    不调用库函数,实现strcpy函数。 

  char   *  strcpy( char   *  strDest, const   char   *  strSrc)
        
{
                
if  ((strDest == NULL) || (strSrc == NULL))  // [1]
                         throw   " Invalid argument(s) " // [2]
                 char   *  strDestCopy = strDest;   // [3]
                 while  (( * strDest ++=* strSrc ++ ) != ' \0 ' );  // [4]
                 return  strDestCopy;
        }

posted on 2008-04-18 11:38 ZhangEF 阅读(298) 评论(0)  编辑  收藏 所属分类: C/C++