fengyanke  

文章分类 -  c/c++

  • 派生类与继承 .
    摘要:一、引入继承的目的1. 代码重用 类的继承和派生机制,使程序员无需修改已有类,只需在已有类的基础上,通过增加少量代码或修改少量代码的方法得到新的类,从而较好地解决了代码重用的问题。2. 代码的扩充 只有在派生类中通过添加新的成员,加入新的功能,类的派生才有实际意义。二、派生类的声明格式(单继承)[cpp] view plaincopyprint?class派生类名:继承方式基类名{//派生类新增的数据成员和成员函数 };class 派生类名:继承方式 基类名 { //派生类新增的数据成员和成员函数};1)基类名是一个已经定义的类的名字,也可称为父类;2)派生类名是继承原有类的特... 阅读全文
    posted @ 2012-10-20 23:07 fengyanke 阅读(274) 评论(0) 推荐(0)
  • C编译器、链接器、加载器详解
    摘要:一、概述C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可加载、可执行代码的过程。过程图解如下:预处理器:将.c 文件转化成 .i文件,使用的gcc命令是:gcc –E,对应于预处理命令cpp;编译器:将.c/.h文件转换成.s文件,使用的gcc命令是:gcc –S,对应于编译命令 cc –S;汇编器:将.s 文件转化成 .o文件,使用的gcc 命令是:gcc –c,对应于汇编命令是 as;链接器 阅读全文
    posted @ 2012-10-20 14:17 fengyanke 阅读(221) 评论(0) 推荐(0)
  • 在 Win7 下运行 TC 2.0 / TC3.0 / BC 3.1 / QB 4.5 等 DOS 开发工具(转载)
    摘要:虽然这几个工具都已经淘汰了,但仍是初学编程的优秀工具。相信不少人都遇到过,在 Win7 / Vista 下运行这些工具编写的图形程序时会出错:(16 bit MS-DOS Subsystem) This system does not support fullscreen mode. Choose 'Close' to terminate the application.(具体的,发生在初始化图形模式的语句,即 TC/BC 的 initgraph() 函数和 QB 的 SCREEN 命令)这里我们用 DosBox 来解决兼容问题。DosBox 可以模拟一个相对完美的 DOS 环 阅读全文
    posted @ 2012-07-31 09:56 fengyanke 阅读(316) 评论(0) 推荐(0)
  • dynamic_cast介绍(转载)
    摘要:dynamic_cast介绍dynamic_cast<type-id> (expression)这个表达式将 expression 转换为一个 type-id 类型的对象。 Type-id 必须是一个指针、指向一个已经定义类的类型或一个指向 VOID 的指针。 Expression 的类型必须是一个指针,如果 type-id 是一个指针;当 type-id 是一个引用的时候必须是一个左值。如果 type-id 是一个到 expression 类的直接或间接的模棱两可的指针,结果是一个到 type-id 类型的子对象:class B { ... };class C : public 阅读全文
    posted @ 2012-07-23 16:35 fengyanke 阅读(157) 评论(0) 推荐(0)
  • C++ 虚函数表解析(转载)
    摘要:前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家一个清晰的剖析。当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片, 阅读全文
    posted @ 2012-07-23 16:03 fengyanke 阅读(106) 评论(0) 推荐(0)
  • C++拷贝构造函数(深拷贝,浅拷贝)(转载)
    摘要:对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include<iostream>usingnamespacestd;classCExample{private: inta;public: CExample(intb) {a=b;} voidShow() {cout<<a<<endl;}};intmain(){ CExampleA(100); CExampleB=A; B.Show(); return0;}运行 阅读全文
    posted @ 2012-07-08 18:09 fengyanke 阅读(105) 评论(0) 推荐(0)
  • 如何成为一名优秀的C程序员(转载)来源:伯乐在线
    摘要:问题的提出每过一段时间我总会收到一些程序员发来的电子邮件,他们会问我是用什么编程语言来编写自己的游戏的,以及我是如何学习这种编程语言的。因此,我认为在这篇博文里列出一些有关C语言的最佳读物应该能帮到不少人。如果你知道其它的优秀读物,请给我发邮件或者直接在评论栏中告诉我吧。问题的解答(你可以略过这部分)我在之前的一篇博文中已经提到过了,目前为止,所有我所编写的商业3D引擎95%都是C89(也称作标准C,或ANSI C)。我之所以选择C89而不是C99是因为有些编译器仍然不能完美支持C99标准。而且从第一天起,我就强制规定游戏需要能在iOS、Windows和Xbox 360平台上都能编译。根据我所 阅读全文
    posted @ 2012-07-07 10:52 fengyanke 阅读(150) 评论(0) 推荐(0)
  • char str[] 和 char *str 的区别(zhuan)
    摘要:char*get_str(void){charstr[]={"abcd"};returnstr;} char str[] = {"abcd"};定义了一个局部字符数组,尽管是数组,但它是一个局部变量,返回它的地址肯定是一个已经释放了的空间的地址。 此函数返回的是内部一个局部字符数组str的地址,且函数调用完毕后 此数组被销毁,所以你返回的指针也就指向一块被销毁的内存,这种写法是错误的。char*get_str(void){char*str={"abcd"};returnstr;} char* str = {"abcd&quo 阅读全文
    posted @ 2012-07-05 08:15 fengyanke 阅读(135) 评论(0) 推荐(0)
  • 空类大小 .
    摘要:1、为何空类的大小不是0呢?为了确保两个不同对象的地址不同,必须如此。类的实例化是在内存中分配一块地址,每个实例在内存中都有独一无二的二地址。同样,空类也会实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化后就有独一无二的地址了。所以,空类的sizeof为1,而不是0.2、请看下面的类:class A{ virtual void f(){} };class B:public A{}此时,类A和类B都不是空类,其sizeof都是4,因为它们都具有虚函数表的地址。3、请看:class A{};class B:public virtual A{};此时,A是空类,其大小为1;B不是空类,其 阅读全文
    posted @ 2012-07-04 23:06 fengyanke 阅读(131) 评论(0) 推荐(0)
  • sizeof和sizeof(string)的问题
    摘要:sizeof和sizeof(string)的问题今天看《程序员面试宝典》一书(为了应付将要到来的微软笔试),看到了sizeof(string)这个问题。在Dev C++上测试的结果是4,很不明白。上网搜了一下,得到如下结果:string strArr1[]={"Trend", "Micro", "Soft"};sizeof(strArr1)=12转自:http://apps.hi.baidu.com/share/detail/30398570关于sizeof(string),今天看那本面试宝典的时候看到这个表达式,有点吃惊,书上写着s 阅读全文
    posted @ 2012-07-04 22:15 fengyanke 阅读(106) 评论(0) 推荐(0)
  • C printf() 详解——printf('%08x',number);
    摘要:printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。函数的原型为:int printf(const char *format, ...);函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。printf()函数的调用格式为:printf("<格式化字符串>", <参量表>);其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符,用来确定输出内容格式。参量表是需要输出的一 阅读全文
    posted @ 2012-07-04 22:05 fengyanke 阅读(565) 评论(0) 推荐(0)
  • 浅谈C/C++的浮点数在内存中的存储方式
    摘要:C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100。则在Intel CPU架构的系统中,存放方式为 10000100(低地址单元) 00000100(高地址单元),因为Intel CPU的架构是小端模式。但是对于浮点数在内存是如何存储的?目前所有的C/C++编译器都是采用IEEE所制定的标准浮点格式,即二进制科学表示法。 在二进制科学表示法中,S=M*2^N 主要由三部分构成:符号位+阶码(N)+尾数(M)。对于float型数据,其二进制有32位,其中符号位1位,阶码8位,尾数23 阅读全文
    posted @ 2012-07-04 22:00 fengyanke 阅读(93) 评论(0) 推荐(0)