常见C++知识点

1、非C++内建型别   A   和   B,在哪几种情况下B能隐式转化为A?

a.   class   B   :   public   A   {   ……}   //   B公有继承自A,可以是间接继承的   
b.   class   B   {   operator   A(   );   }   //   B实现了隐式转化为A的转化   
c.   class   A   {   A(   const   B&   );   }   //   A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函数   
d.   A&   operator=   (   const   A&   );   //   赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个  

2、 以下代码有什么问题?[C++易]  
  cout   <<   (true?1:"1")   <<   endl;  
  答:三元表达式“?:”问号后面的两个操作数必须为同一类型。

3、  以下反向遍历array数组的方法有什么错误?[STL易]  
  vector   array;  
  array.push_back(   1   );  
  array.push_back(   2   );  
  array.push_back(   3   );  
  for(   vector::size_type   i=array.size()-1;   i>=0;   --i   )   //   反向遍历array数组  
  {  
          cout   <<   array[i]   <<   endl;  
  }  
   
  答:首先数组定义有误,应加上类型参数:vector<int>   array。其次vector::size_type被定义为unsigned   int,即无符号数,这样做为循环变量的i为0时再减1就会变成最大的整数,导致循环失去控制。

4、C++中的空类,默认产生哪些类成员函数?[C++易]  
  答:  
  class   Empty  
  {  
  public:  
          Empty();                                                     //   缺省构造函数  
          Empty(   const   Empty&   );                         //   拷贝构造函数  
          ~Empty();                                                   //   析构函数  
          Empty&   operator=(   const   Empty&   );   //   赋值运算符  
          Empty*   operator&();                               //   取址运算符  
          const   Empty*   operator&()   const;       //   取址运算符   const  
  };     

5、写一个函数,完成内存之间的拷贝。[考虑问题是否全面]  
  答:  
  void*   mymemcpy(   void   *dest,   const   void   *src,   size_t   count   )  
  {  
          char*   pdest   =   static_cast<char*>(   dest   );  
          const   char*   psrc   =   static_cast<const   char*>(   src   );  
          if(   pdest>psrc   &&   pdest<psrc+cout   )   能考虑到这种情况就行了  
          {  
                  for(   size_t   i=count;   i!=0;   --i   )   //注意size_t是unsigned int为0时将自动变成很大的值
                                  pdest[i]   =   psrc[i];  
          }  
          else  
          {  
                  for(   size_t   i=0;   i<count;   ++i   )  
                          pdest[i]   =   psrc[i];  
          }  
          return   dest;  
  }   
    或许void*   mymemcpy(   void   *dest,   const   void   *src,   size_t   count   )  
  {  
          char*   pdest   =   static_cast<char*>(   dest   );  
          const   char*   psrc   =   static_cast<const   char*>(   src   );  
   
          assert(pdest   !=   NULL   &&   psrc   !=   NULL);  
          assert(pdest   >=psrc   +count ||   psrc   >=pdest   +count   );  
   
          while(count   -->0)  
                *pdest   ++   ==   *psrc   ++;  
   
          return     pdest;  
  }  更好

 

 

转自:http://topic.csdn.net/t/20051105/21/4374182.html
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值