当前位置:首页 » 编程软件 » dc编译器

dc编译器

发布时间: 2022-08-16 00:25:59

① //dc.SelectObject(pOldPen); dc.SelectObject(*pOldPen); 有什么区别

呵呵,C++就是经常有这种细小的trick。所以才会有人说C++是最复杂、最充满奇怪技巧与陷阱的语言。

你这个问题很简单,其实就是函数重载和操作符重载共同作用的结果。

看看CDC::SelectObject的定义就知道了,它有诸多函数重载。它不仅可以接受CPen*、CBrush*、CBitmap* 等各种CGdiObject的指针作为参数,还有另外一个很重要的重载是接受一个句柄:HGDIOBJ作为参数的。也就是说你可以把一个HGDIOBJ句柄作为参数送给SelectObject。

再看看CPen类,它则是继承自CGdiObject。而CGdiObject则重载了类型转换操作符,也就是operator HGDIOBJ()。这样一来,在需要HGDIOBJ语境的情况下,这个对象可以自动被转换成HGDIOBJ。

明白了吧?你的第二种写法,最后编译器是这么认为的:
先调用*pOldPen上的operator HGDIOBJ转换函数,将这个对象转换成HGDIOBJ类型返回,然后再调用dc.SelectObject(),传入刚才转换出来的HGDIOBJ句柄。所以仍然是可以正常编译通过的。
其实你如果在你SelectObject那句下一个断点,单步调试跟踪一下的话,你也就能看到这个过程了:程序会先走到CGdiObject::operator HGDIOBJ()里面,返回一个句柄,然后再走到CDC::SelectObject(HGDIOBJ hObject)里面。这个流程就很清晰了。

呵呵,C++中经常会有许多让人眼花缭乱的奇怪用法,有许多甚至达到了匪夷所思的地步,上面的这个只不过是最简单的一个trick罢了。有各种奇特的技巧被后人不断挖掘出来,难怪有人说 “C++是唯一一门语言之父还要别人教他怎么使用的语言”。 -_-b

② 谁能详细说明一下编译器自动调用类型构造函数进行类型转换的原理

StrCell sc = dc + dc; 这条语句执行时调用StrCell的构造函数,与StrCell sc(dc + dc);相同。
它们都需要这样的构造函数:StrCell(const DblCell &dc);

类型转换是把一种类型转换为另一种不同的类型,而源代码中的构造函数接受的就是DblCell参数,所以StrCell sc = dc + dc;严格来说不算是类型转换。

假如构造函数是StrCell(const StrCell &dc); 这个时候就需要把DblCell转换为StrCell,此时存在一个类型转换。

因为要把DblCell转换为StrCell,所以需要在类DblCell中定义一个类型转换运算符:operator StrCell(); 它的作用就是把DblCell转换为StrCell,这个函数是成员函数,不需要参数,也不需要在函数声明时显式写出返回值,当然该函数仍然要返回一个值。

有了这个运算符后,编译会对StrCell sc = dc + dc;做扩展:
1. 生成临时变量var1保存dc + dc的结果。
2. 调用var1.StrCell()这个运算符函数把var1转换为类型StrCell,运算符函数的返回值将成为一个临时变量var2。
3. 调用sc的构造函数,并传入var2。
4. 结束。

③ C++编译器一定要按装英文版本的吗

编译器的核心实际上是命令行的,无所谓英文版(命令行只认英文)。
如果是IDE,很多都有汉化版的。当然不一定要装英文版。
不过VC++6的话,汉化质量实在太差(据说还有莫名其妙的BUG),还不如用英文版。
Microsoft Visual Studio中带VC++,有官方中文版。LZ可以下个VS2008 Team Suite。不过文件相当大,对于新手来说不怎么实用。
Dev-C++比较小,对标准的实现也比较好,不过调试功能很烂。
C-Free应该也可以用。
像Turbo C++就太老了,不推荐。

④ 为什么我的visual C++6.0总是死机

有些是电脑的硬件与VC6.0要求的不一致导致的, 也有的是编译器太小造成的!VC对电脑的硬件要求比较高,稍不慎就容易死机,最好就是安装DC编译器,这个编译器要求较低,一般根本就不会死机!
建议:安装DC,如果觉得DC有点低级,就换成BC!

⑤ 推荐个好用的c语言编译器我是C语言初学者

我不同意上面两人的说法。Tc可以说是较老的了,而且它出现时写C是用C90标准的,并且允许不加部分头文件,而且用起来也很不方便。winTC用的是tc的内核,虽然有了界面,支持复制粘贴等操作,但它的允许不加部分头文件不是方便,却可能成为影响你的原因。你第一次打开时它也说写代码要注意标准的写法。但不加头文件表明你写的代码在这个编译器可以编译,但转到别的编译器就不行了。而你如果习惯了的话,以后写一些软件,用到其它的编译器时,它提示错误你还不知道哪里错。事实上,以前谭浩强的书第二版就使很多人都犯了这样的错误,许多人都按书上的代码,在TC2.0可以运行,但到其它的如VC++等,那些代码都不能用了。而且winTc都没有调试的功能。当你写上百行的代码时,像指针的一引动错误或数组越界,或数值溢出,没有调试功能查看变量的话,想找出错误是很难的,而这些错误,编译器是不报的。推荐的软件有dev-C++用的是linux的Gcc内核, http://u.115.com/file/f69e189f52
devcpp-4.9.9.2.rar http://u.115.com/file/f6dcf25d9ecodeblocks-8.02mingw-setup.exe 还有VC++,不过它很大块。当然c-Free的调试功能也很好用的。

⑥ DC编译器里编译之后报ERROR的框框不见了

视图里找找?

⑦ 学C语言现在最好用的编程软件

Turbo C就可以的。编辑文本的时候可以用utraledit
至于vc++之类的我是不推荐初学者使用的

热点内容
液碱存储 发布:2024-05-03 13:21:13 浏览:156
linux如何改配置文件 发布:2024-05-03 13:00:54 浏览:31
哪个安卓模拟器老爷机带得动 发布:2024-05-03 13:00:49 浏览:576
编程与实战 发布:2024-05-03 12:54:30 浏览:38
电脑开机有密码rpc服务器不可用 发布:2024-05-03 12:40:54 浏览:471
硬件的算法 发布:2024-05-03 12:34:28 浏览:388
支付密码为什么就六位 发布:2024-05-03 12:29:17 浏览:920
脚本找书 发布:2024-05-03 12:02:17 浏览:493
境外服务器租用怎么办 发布:2024-05-03 11:45:34 浏览:943
我的世界服务器怎么设置到重生点 发布:2024-05-03 11:33:04 浏览:752