随笔分类 - C/C++
摘要:1、文件处理过程: 预处理--编译--汇编--链接。 预处理:处理#include操作和宏定义替换等。 编译: 预处理后的文本进到下一步-编译,编译产生汇编代码,送到汇编阶段。 汇编:产生目标文件--输出的结果可以用于链接的目标代码,目标代码文件已经是可以执行的二进制代码文件。 链接:把汇编产生的目标文件与其他目标文件链接处理产生可以执行文件。2、ASCII码 American Standard Code for Information Interchange。ASCII码用8位二进制数(一个字节)来表示一个字符。计算机存储的不是字符本身,而是将该字符所对应的ASCII 码放到...
阅读全文
摘要:java与C++的虚函数比较java与C++的虚函数比较class base{ private void print() { System.out.println("base"); } public void doprint() { print(); }}class derive extends base{ private void print() { System.out.println("derive"); }}class testVirtual{ public static void main(String args[]) { base b = n
阅读全文
摘要:C++类对象内存结构 首先介绍一下C++中有继承关系的类对象内存的布局:在C++中,如果类中有虚函数,那么它就会有一个虚函数表的指针__vfptr,在类对象最开始的内存数据中。之后是类中的成员变量的内存数据。 对于子类,最开始的内存数据记录着父类对象的拷贝(包括父类虚函数表指针和成员变量)。 之后是子类自己的成员变量数据。 对于子类的子类,也是同样的原理。但是无论继承了多少个子类,对象中始终只有一个虚函数表指针。 为了探讨C++类对象的内存布局,先来写几个类和函数 首先写一个基类: class Base{public:virtual void f() { cout << "
阅读全文
摘要:C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没
阅读全文
摘要:类似代码如下:class A{public:virtual void Test(){}};class B:public A{public:virtual void Test(){}};B b;A a = b;A * pA = &b;a.Test();pA->Test();大家都知道a.Test调用的是A::Test,而pA->Test调用的是B::Test,那么为什么呢?首先来看a.Test;其实很容易理解,这里的a就是一个A类型的变量,它的内存布局在赋值的时候已经从B转换到A了,多于的数据都被丢弃,b对象的虚函数表不会被复制,A a时内存里已经有a的虚函数表了,因此其就是
阅读全文
摘要:Nick Hodapp is the Visual C++ Product Manager. He's also damn nice guy whom I unfairly and continually give a hard time. I caught up with Nick at VSLive! 2002 in San Francisco and passed on a bunch of questions that I see continually being asked by MFC and ATL developers so that we could get the
阅读全文
摘要:1、C语言的结构体没有函数,C++有,默认为public,类的默认为private2、析构函数时无参的,this指针底层的运行机制 P40有详细讲解 this指针是一个隐含的指针,它是指向对象本身,代表了对象的地址 一个类所有的对象调用的成员函数都是同一代码段。那么成员函数又是怎么识别属于同一对象的数据成员呢?原来,在对象调用pt.output(10,10)时,成员函数除了接受2个实 参外,还接受到了一个对象s的地址。这个地址被一个隐含的形参this指针所获取,它等同于执行this=&pt。所有对数据成员的访问都隐含地被加上前缀this->。例如:x=0;等价于 this->
阅读全文
摘要:函数名与函数指针一 通常的函数调用一个通常的函数调用的例子:View Code 1 //自行包含头文件 2 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); 3 4 int main(int argc, char* argv[]) 5 { 6 MyFun(10); //这里是调用MyFun(10);函数 7 8 return 0; 9 }10 11 void MyFun(int x) //这里定义一个MyFun函数12 {13 printf(“%d\n”,x);14 }这个MyFun函数是一个无返回值的函数,它并不完成什么事情。这种调用函数
阅读全文
摘要:转载网址:http://www.cppblog.com/andxie99/archive/2007/06/24/26855.html c++为我们所提供的各种存取控制仅仅是在编译阶段给我们的限制,也就是说是编译器确保了你在完成任务之前的正确行为,如果你的行为不正确,那么你休想构造出任何可执行程序来。 但如果真正到了产生可执行代码阶段,无论是c,c++,还是pascal,大家都一样,你认为c和c++编译器产生的机器代码会有所不同吗,你认为c++产生的机器代码会有访问限制吗?那么你错了。什么const,private,统统没有(const变量或许会放入只读数据段),它不会再给你任何的限制,你可以.
阅读全文

浙公网安备 33010602011771号