主题:C++的一些FAQ
格子裙
[专家分:15760] 发布于 2006-08-12 17:48:00
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个回复)
51 楼
diaoxue [专家分:600] 发布于 2007-04-07 14:17:00
我也是学c++的啊
好东西啊
52 楼
小黑骑DK [专家分:610] 发布于 2007-04-08 17:18:00
格子辛苦 !
53 楼
zw10101 [专家分:0] 发布于 2007-04-09 14:08:00
见识了!
54 楼
vcacm [专家分:1500] 发布于 2007-04-15 12:50:00
[quote]这图是一白领.蛮喜欢的[/quote]
[code]
[color=FF00FF]
请问格子学习LINUX 学得怎样 ?
AND
FVWM 用得怎样,可不可以发一scrennshot 上来呀!
I am a linuxfans /
[/color]
[/code]
55 楼
vcacm [专家分:1500] 发布于 2007-04-15 12:53:00
[code]
[color=FF00FF]
FVWM 让我既让我高兴,又让我哭笑不得!
真佩服"王垠", 真正的LINUX 高手!
还有LINUS!
[/color]
[/code]
56 楼
格子裙 [专家分:15760] 发布于 2007-04-20 22:04:00
[img]http://www.ediwon.com/upload/shot1.png[/img]
见笑了,那我就贴出来了。
http://upload.programfan.com/upfile/200610150030613.rar
(因为上传不支持tar.gz后辍名,所以我把后辍名改rar上传了。所以请下载的朋友把文件
200610150030613.rar下载到本地后改名为fvwm.tar.gz,再解压到自己/root/目录下。)
请记得,如果你~/.fvwm/目录下有.fvwm2rc文件请删除掉。(或者改名)
因为我配置文件名为config, fvwm读取顺序是先读config再读.fvwm2rc文件的。
全部代码都是自己一个字符一个字符输入进去的...原创
有哪里不理解的可以发mail给我。
janlex[at]msn.com
57 楼
格子裙 [专家分:15760] 发布于 2007-04-20 22:08:00
http://www.ediwon.com/upload/shot1.png
这是图的地址,用IE打开,,是大图..
58 楼
sjsujs [专家分:20] 发布于 2007-04-26 08:18:00
多谢楼主,早就想找那个Bjarne Stroustup的论坛了,很好,过后大有帮助.
59 楼
343588468 [专家分:0] 发布于 2007-05-10 19:28:00
顶
60 楼
hn_lijianguo [专家分:540] 发布于 2007-05-17 16:32:00
#include <iostream>
#include <cstdlib>
#include <cctype>
#include <string>
class Error {};
class Calculator
{
int pos;
std::string expr;
int addsubt();
int multdiv();
int number() throw(Error);
public:
Calculator(){}
int Compute(const std::string& str) throw(Error);
};
int Calculator::Compute(const std::string& str) throw(Error)
{
int rtn=0;
try
{
pos=0;
expr=str;
rtn=addsubt();
if (pos<expr.length() && expr[pos]!='\0')
throw Error();
}
catch(Error)
{
std::cout<<' \r';
while (pos--)
std::cout<<' ';
std::cout<<"^ syntax error"<<std::endl<<'\a';
throw;
}
return 0;
}
int Calculator::addsubt()
{ int qu=1;
int rtn=multdiv();
while (expr[pos]=='+' || expr[pos]=='-')
{
int op=expr[pos++];
int opr2=multdiv();
if(op=='+')
rtn+=opr2;
else
rtn-=opr2;
}
if(!expr[pos])
std::cout<<rtn<<std::endl;
return rtn;
}
int Calculator::multdiv()
{
int rtn=number();
while (expr[pos]=='*' || expr[pos]=='/')
{
int op=expr[pos++];
int opr2=number();
if(op=='*')
rtn*=opr2;
else
rtn/=opr2;
}
return rtn;
}
int Calculator::number() throw(Error)
{
int rtn;
if(expr[pos]=='(')
{
pos++;
rtn=addsubt();
if(expr[pos++]!=')')
throw Error();
}
else
{
if(!isdigit(expr[pos]))
throw Error();
char ans[80]= "0";
int i=0;
while ( isdigit(expr[pos]) && pos<expr.length())
ans[i++]=expr[pos++];
ans[i]='\0';
rtn=atoi(ans);
}
return rtn;
}
int main()
{
int ans;
do
{
std::cout<<"Enter expression (o to quit):"<<std::endl;
std::string expr;
std::cin>>expr;
try
{
Calculator calc;
ans=calc.Compute(expr);
if(ans != 0)
std::cout<< ans <<std::endl;
}
catch(Error)
{
std::cout<<"Try again"<<std::endl;
ans=1;
}
}
while(ans != 0);
return 0;
}
C++显式地允许delete操作将操作数左值置 0,而且我曾经希望C++的实现能够做到这一
点,但这种思想看来并没有在C++的实现中变得流行。
这是个运算器
我来回复