| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6322 人关注过本帖
标题:推荐:C++语言常见问题解答
取消只看楼主 加入收藏
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
为什麽我的 DOS C++ 程式说 "Sorry: floating point code not linked" 
       “抱歉,浮点运算程式码未连结进来”? 
 
编译器会试著节省执行档的大小,所以除非必要,否则不引入浮点数→字串格式转换 
的副程式,可是有时候它会猜错,就会产生上述的错误讯息了。解决法:(1) 使用 
  而不要用 ,或是 (2) 在您程式的某个地方,置入如下的函 
数(但是不要真的去呼叫它!): 
 
         static void dummyfloat(float *x) { float y; dummyfloat(&y); } 
 
请参考关於 stream I/O 的 FAQ项目,有提到更多使用  vs  
的理由。 

Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2006-12-23 22:56
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
为什麽当我没执行 BC45 IDE 的话,BC++ 做出来的 Windows 应用程式就不能 
       用? 
 
用 BC++ 写 Windows 应用程式,如果当 BC45 IDE 正在执行时,你的程式很正常; 
待会儿当 BC45 IDE 关掉了,而你的程式却在建立视窗时产生了个 exception 的话 
,就把底下这行程式加到你的应用程式类别 ("YourApp::InitMainWindow()") 里头 
的 InitMainWindow() 内: 
 
         EnableBWCC(TRUE); 
 
【译注】这是因为你用 BC++ 写的应用程式,可能会自动用到 bwcc*.dll,刚好 
         BC++ 的 IDE 也会用到它,所以两者并存的话,BWCC 已先被 IDE 载入了。 
         若是 IDE 未执行,则 BWCC 未被载入,你就得用上面那一行程式来通知 
         OWL 去载入它。 

Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2006-12-23 22:56
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
怎样从 C++ 中呼叫 C 的函数 "f(int,char,float)"? 
 
告诉 C++ 编译器说:它是个 C 的函数: 
        extern "C" void f(int,char,float); 
 
确定你有 include 进来完整的函数原型 (function prototype)。一堆 C 的函数可 
以用大括号框起来,如下: 
 
        extern "C" { 
          void* malloc(size_t); 
          char* strcpy(char* dest, const char* src); 
          int   printf(const char* fmt, ...); 
        } 

Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2006-12-25 22:16
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
应该替类别宣告个成员函数,还是夥伴函数? 
 
可能的话,用成员函数;必要时,就用夥伴。 
 
有时在语法上来看,夥伴比较好(譬如:在 "Fred" 类别中,夥伴函数可把 "Fred" 
弄成是第二个参数,但在成员函数中则一定得放在第一个)。另一个好例子是:二元 
中序式算数运算子(譬如:"aComplex + aComplex" 可能应该定义成夥伴而非成员函 
数,因为你想让 "aFloat + aComplex" 这种写法也能成立;回想一下:成员函数无 
法提升它左侧的参数,因为那样会把引发该成员函数的物件所属之类别给改变掉)。 
 
在其他情况下,请选成员函数而不要用夥伴函数。 
 

Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2006-12-26 21:39
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 

我能 "free()" 掉由 "new" 配置到的、"delete" 掉由 "malloc()" 配置到的 
      记忆体吗? 
 
不行。 
 
在同一个程式里,使用 malloc/free 及 new/delete 是完全合法、合理、安全的; 
但 free 掉由 new 配置到的,或 delete 掉由 malloc 配置到的指标则是不合法、 
不合理、该被痛骂一顿的。 

[此贴子已经被作者于2006-12-29 22:42:21编辑过]


Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2006-12-27 21:54
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
什麽是参考(reference)? 
 
一个物件的“别名”(alias,另一个名称)。 
 
参考通常用於传址呼叫(pass-by-reference): 
 
        void swap(int& i, int& j) 
        { 
          int tmp = i; 
          i = j; 
          j = tmp; 
        } 
 
        main() 
        { 
          int x, y; 
          //... 
          swap(x,y); 
        } 
 
在这里 "i" 和 "j" 分别是是 main 函数中 "x" 与 "y" 的别名,换句话说,"i" 就 
是 "x"--不是个指向 "x" 的指标,也不是 "x" 该值的复制品,而它的的确确就是 
"x" 本身。你对 "i" 做的任何动作,都会反映到 "x" 上;反之亦然。 
 
从最底层来看,参考最常用指标来实作,它的效果有点像 C 里头的「传指标呼叫」 
(pass-by-pointer),但 "&" 取址运算子由呼叫者换到被呼叫者之处了,你也要删 
去所有的 "*" 运算子。 

Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2006-12-29 22:44
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
如果设定某值给参考会怎麽样? 
 
会更动到被参考者(referrent,该「参考」所参考到的物件)。 
  记住:「参考」就是「被参考者」,因此动了参考就会改动到被参考者(「参考」是 
「被参考者」的左值 "Lvalue"〔出现在设定陈述的左边〕)。 
 
更进一步,我们也允许参考被传回。这样子函数呼叫就可放在设定陈述的左边,这对 
运算子多载的场合很有用。 

Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2006-12-29 22:44
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
行内函数是做什麽的? 
 
行内函数(inline function)是个程式码会塞入呼叫者所在之处的函数。就像巨集 
一样,行内函数免除了函数呼叫的额外负担,以增进效率,并且(尤其是!)还能让 
编译器对它施以最佳化(程序融合 "procedural integration")。不过和巨集不同 
的是:它只会对所有引数求一次的值(在语意上,该“函数呼叫”和正常函数一样, 
只是比较快速罢了),以避免某些不易察觉的巨集错误。此外,它还会检测引数的型 
态,做必要的型别转换(巨集对你有害;除非绝对必要,否则别再用它了)。 
 
注意:过度使用行内函数会让程式码肥胖,於分页(paging)环境下反而有负面的性 
能影响。 
宣告法:在函数定义处使用 "inline" 关键字: 
 
        inline void f(int i, char c) { /*...*/ } 
 
或者是在类别内将定义包括进去: 
 
        class Fred { 
        public: 
          void f(int i, char c) { /*...*/ } 
        }; 
 
或是在类别外头,以 "inline" 来定义该成员函数: 
 
        class Fred { 
        public: 
          void f(int i, char c); 
        }; 
 
        inline void Fred::f(int i, char c) { /*...*/ } 

Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2006-12-29 22:46
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
建构子(constructor)是做什麽的? 
 
建构子乃用来从零开始建立物件。 
 
建构子就像个「初始化函数」;它把一堆散乱的位元组成一个活生生的物件。最低限 
度它会初始化内部用到的栏位,也可能会配置所须的资源(记忆体、档案、semaphore 
、socket 等等)。 
 
"ctor" 是建构子 constructor 最常见的缩写。

Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2006-12-29 22:46
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
怎样才能让建构子呼叫另一个同处一室的建构子? 
 
没有办法。 
 
原因是:如果你呼叫另一个建构子,编译器会初始化一个暂时的区域性物件;但并没 
有初始化“这个”你想要的物件。你可以用预设参数(default parameter),将两 
个建构子合并起来,或是在私有的 "init()" 成员函数中共享它们的程式码。 
 

Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2006-12-29 22:46
快速回复:推荐:C++语言常见问题解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018661 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved