C++
文章平均质量分 71
教兽
这个作者很懒,什么都没留下…
展开
-
VS2008使用命令行选项查看对象的内存布局
微软的Visual Studio 2008(VS2008)提供了一个新的选项,给用户显示C++对象在内存中的布局。这个选项就是/d1reportSingleClassLayout。具体使用方法如下,在写好相应的cpp文件之后,需要启动VS2008的命令行工具“Visual Studio 2008 Command Prompt”,切换到cpp文件所在目录之后,输入如下的命令:转载 2013-05-15 15:28:41 · 770 阅读 · 0 评论 -
extern "C"和__declspec(dllexport)以及__declspec(dllimport) 和def的简单解析
前面的extern "C" __declspec(dllexport) __declspec(dllimport)都是用于函数或者变量,甚至类的声明的(可以把extern "C"放在class的前面,但是编译器会忽略掉,最后产生的还是C++修饰符,而不是C修饰符)这样的用法有个好处就是下面的代码可以在混有类的函数和变量上使用下面的宏,虽然对类不起作用:#ifdef __cplusplu转载 2013-06-05 10:50:52 · 16093 阅读 · 0 评论 -
C语言中的static变量 和 C++中static变量
C语言中static的变量:1).static局部变量 a.静态局部变量在函数内定义,生存期为整个程序运行期间,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。 b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。2).static全局变量转载 2012-04-13 19:36:54 · 2072 阅读 · 0 评论 -
如何输出类的非静态成员函数地址
首先我们定义一个类Ctest,类里面包含三个不同形式的成员函数,静态成员函数statFunc()、动态成员函数dynFunc()和虚拟函数virtFunc()。在main函数中我们利用cout标准输出流分别输出这三个函数的地址,程序如下所示:#include #include using namespace std;class Ctest{public: sta转载 2013-05-14 10:08:07 · 657 阅读 · 0 评论 -
C++ 虚函数表、函数地址、内存布局解析
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使转载 2013-05-15 15:30:13 · 1590 阅读 · 1 评论 -
用C++设计一个不能被继承的类
这道题除了考察应聘者的C++基本功底外,还能考察反应能力,是一道很好的题目。在Java 中定义了关键字final,被final 修饰的类不能被继承。但在C++中没有final 这个关键字,要实现这个要求还是需要花费一些精力。首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类的析构函数。要想一个类不能被继承,我们只要把它的构造函数和转载 2012-04-09 13:09:47 · 493 阅读 · 0 评论 -
C++文件读写
在C++中如何实现文件的读写?作者: infobillows 发表日期: 2007-04-03 21:33 点击数: 465一、ASCII 输出为了使用下面的方法, 你必须包含头文件(译者注:在标准C++中,已经使用取代,所有的C++标准头文件都是无后缀的。)。这是 的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, 已经被包含了, 所以你不必包含所有这两个文转载 2012-08-08 11:07:40 · 721 阅读 · 0 评论 -
C++的头文件和实现文件分别写什么
在C++编程过程中,随着项目的越来越大,代码也会越来越多,并且难以管理和分析。于是,在C++中就要分出了头(.h)文件和实现(.cpp)文件,并且也有了Package的概念。对于以C起步,C#作为“母语”的我刚开始跟着导师学习C++对这方面还是感到很模糊。虽然我可以以C的知识面对C++的语法规范,用C#的思想领悟C++中类的使用。但是C#中定义和实现是都在一个文件中(其实都是在类里面),而转载 2012-08-13 09:02:58 · 1433 阅读 · 0 评论 -
虚函数在对象中的内存布局
典型地,C++通过虚函数实现多态性。多态性的定义:“无论发送消息的对象属于什么类,他们均发送具有相同形式的消息,对消息的处理方式可能随接受消息的对象而变。”具体地说,“在某个基类上建立起来的类的层次结构中,可以对任何一个派生类的对象中的同名成员函数进行调用,而被调用的成员变量所提供的处理可以随其所属的类而改变。”虚函数首先是一种成员函数,它可以在该类的派生类中被重新定义并被赋予另外一种处理功能。转载 2013-05-14 10:09:01 · 643 阅读 · 0 评论 -
探寻C++最快的读取文件的方案
在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据。还有人说Pascal的read语句的速度是C/C++中scanf比不上的,C++选手只能干着急。难道C++真的低Pascal一等吗?答案是不言而喻的。一个进阶的方法是把数据一下子读进来,然后再转化字符串,这种方法传说中很不错,转载 2012-08-08 11:17:14 · 731 阅读 · 0 评论 -
深入探讨vc下C++模板编译模型
写过模板的朋友也许知道,一个模板程序,当编译器看到模板定义时并不立即产生代码,只有在我们用到模板,并对其实例化的时候,才会产生特定的实例。此时,编译器就要访问定义模板的源代码了。如果源代码不可访问,当然,编译器会报错的。记得我初学的时候,采用的是直接将声明和实现全部放在一个.h里面这个方法。但是,有时候我们确实想在.h文件中声明,在CPP文件中实现,从而实现文件分离。那么下面我就写写一般模板函数,转载 2013-05-13 09:30:28 · 612 阅读 · 0 评论 -
临时对象
int foo(int n){ return n;}void bar(int n){ return ;}struct wrap_int{ wrap_int(int _n): n(n) {} operator int() { return n; } operator int()const { return n; } wrap_int operator ++() { retu转载 2013-05-13 15:38:17 · 619 阅读 · 0 评论 -
临时对象实验
#ifndef FATHER_H#define FATHER_H#include"iostream"#includeusing namespace std;class father{public: father(std::string name1) : name(name1){ cout << "new " << name << endl; } father(father原创 2013-05-13 16:16:17 · 659 阅读 · 0 评论 -
C++之创建对象时的new与不new
C++在创建对象的时候可以采用两种方式:(例如类名为Test) Test test 或者 Test* pTest = new Test()。 这两种方法都可以实例化一个对象,但是这两种方法有很大的区别,区别在于对象内容所在的内存空间不同,众所周知,内存的分配方式有三种 (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。转载 2012-04-09 13:08:52 · 822 阅读 · 0 评论 -
C++头文件编译问题
一、C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西转载 2012-08-11 16:56:49 · 13806 阅读 · 4 评论 -
switch语句中case跳过变量初始化的问题
The initialization of identifier can be skipped in a switch statement. You cannot jump past a declaration with an initializer unless the declaration is enclosed in a block. (Unless it is declared wi转载 2013-04-08 23:49:54 · 1844 阅读 · 0 评论 -
__declspec用法详解
__declspec用法详解 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式。其它的有关存储方式的修饰符如static与extern等是C和 C++语言的ANSI规范,而__declspec是一种扩展属性的定义。扩展属性语法简化并标准化了C和C++语言关于Microsoft的扩展。用法:__declspec ( extended-decl-modif转载 2013-06-05 10:45:03 · 1614 阅读 · 0 评论