回 帖 发 新 帖 刷新版面

主题:C++的一些FAQ

Bjarne Stroustrup对一些常见问题的答复,不一定因为是Bjarne Stroustrup说的就怎么怎么样,不过毕竟他是个很有水平的

原文的地址为:http://www.research.att.com/~bs/bs_faq.html
[建议E文好的看E文的,我最开始没找到翻译的,就是自己对着金山词霸慢慢看的,不过看了些就放弃了...大家不要学我]

中文的从网上发现的,翻译为左轻侯,这里只是一部分的问题

问题                                        楼层
我如何写个非常简单的程序?                  1
为什么一个空类的大小不为 0?                2
为什么析构函数默认不是 virtual 的?         3
为什么不能有虚拟构造函数?                   4
我能够在构造函数中调用一个虚拟函数吗?      5 
为什么重载在继承类中不工作?                6
怎样将一个整型值转换为一个字符串?          7
我应该将“const”放在类型之前还是之后?     8
“int* p”正确还是“int *p”正确?          9
为什么 delete 不会将操作数置 0?            10
我能够写“void main()”吗?                 11
我如何定义一个类内部(in-class)的常量?    12
我为什么必须使用一个造型来转换*void?       13
有没有“指定位置删除”(placement delete)?  14
为什么编译要花这么长的时间?                15
我必须在类声明处赋予数据吗?                16
我能防止别人继承我自己的类吗?              17
为什么不能为模板参数定义约束(constraints)?18
什么是函数对象(function object)?         19
我应该如何对付内存泄漏?                    20
我为什么在捕获一个异常之后就不能继续?      21
怎样从输入中读取一个字符串?                22
为什么 C++不提供“finally”的构造?         23
为什么我不能重载点符号,::,sizeof,等等?  24 
使用宏有什么问题?                          25



如果大家感觉好,希望顶一顶,多让些学习C++的朋友们都学习学习. [em2]

加油.!~~~~~~~~~~~~~~~~~ 同志们!

回复列表 (共61个回复)

31 楼

还有吗,呵呵,经典啊,

32 楼

好贴!希望楼主继续发这样的好贴!

33 楼

呵呵,格子,发那样的图片不太好的哦
我也有那个FAQ~~

34 楼

这图是一白领.蛮喜欢的

35 楼


谢谢你以前对我的帮助

36 楼


好贴,留着慢慢看!

37 楼

同意27楼的,不过格子真的辛苦了!

38 楼

这个程序出了点错误,.不知道怎么解决

#include<iostream.h>
#include<stdlib.h>
typedef struct node{
    char data ;
    int weight;
    node*parent;
    node*lchild;
    node*rchild;
}*bitree;
int i=0;
void InitHuffmanTree(bitree T)
{    char ch;
cin>>ch;

 if(ch=='/')
  T=NULL;
 else
 { if(!(T=new node))
     exit(0);
  T->data=ch;
  InitHuffmanTree(T->lchild);
  InitHuffmanTree(T->rchild);
     
 }
}
bitree T[60];
void InputWeight(bitree T)
{  
    if(T)
    {if(T->lchild==NULL&&T->rchild==NULL)
    cin>>T->weight ;
    T[i].weight =T->weight;
    InputWeight(T->lchild);
    InputWeight(T->rchild);
    i++;
    }
}
int n=i;int m=n*2-1;
void SelectMin(bitree T,int j,int &p1,int &p2)
{   int m,n,t,k;
   k=t=T[0].weight;
  for(m=1;m<=j;m++)
   if(T[m].weight<k)
   {  k=T[m].weight;
      p1=m;
   }
  for(n=1;n<=j;n++)
      if(T[n].weight>=k&&T[n].weight<=t)
      {   t=T[n].weight;
          p2=n;
      }
}
void CreateHuffmanTree(bitree T)
{//构造哈夫曼树,T[m-1]为其根结点
      int i,p1,p2;
      InitHuffmanTree(T); //将T初始化
      InputWeight(T); //输入叶子权值至T[0..n-1]的weight域
      for(i=n;i<m;i++)
      {//共进行n-1次合并,新结点依次存于T[i]中
          SelectMin(T,i-1,p1,p2);
          //在T[0..i-1]中选择两个权最小的根结点,其序号分别为p1和p2
          T[p1].parent=T[p2].parent=T[i];
          T[i].lchild=T[p1]; //最小权的根结点是新结点的左孩子
          T[i].rchild=T[p2]; //次小权的根结点是新结点的右孩子
          T[i].weight=T[p1].weight+T[p2].weight;
      } // end for
}
void main()
{      
    bitree T;
CreateHuffmanTree(T);
}

39 楼

厉害...

40 楼

顶一下,说的不错!

我来回复

您尚未登录,请登录后再回复。点此登录或注册