随笔 - 741  文章 - 0  评论 - 260  阅读 - 416万

随笔分类 -  [002] C/C++

上一页 1 ··· 5 6 7 8 9
C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
摘要:有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:a.引用b.常量c.静态d.静态常量(整型)e.静态常量(非整型) 常量和引用,必须通过参数列表进行初始化。静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末。参考下面的代码以及其中注释:#include <iostream>using namespace std;class BClass{public:BClass() : i(1), ci(2), ri(i){} // 对于常量型成员变量和引用型成员变量,必须通过参数化列表的 阅读全文
posted @ 2012-08-31 15:22 莫水千流 阅读(30824) 评论(0) 推荐(5) 编辑
__attribute__详解
摘要:GNU C的一大特色就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数。__attribute__语法格式为:__attribute__ ((attribute-list))其位置约束为:放于声明的尾部“;”之前。函数属性(Function Attribute)函数属性可以帮助开发 阅读全文
posted @ 2012-07-04 13:39 莫水千流 阅读(607) 评论(0) 推荐(0) 编辑
MultiByteToWideChar和WideCharToMultiByte用法详解
摘要:MultiByteToWideChar和WideCharToMultiByte用法详解//========================================================================//TITLE:// MultiByteToWideChar和WideCharToMultiByte用法详解//AUTHOR:// norains//DATE:// 第一版:Monday 25-December -2006// 增补版:Wednesday 27-December -2006// 修订版:Wednesday 14-March-2007 (修正之前的错 阅读全文
posted @ 2012-06-14 19:03 莫水千流 阅读(360) 评论(0) 推荐(0) 编辑
C++ 数组参数
摘要:在 C++中,数组永远不会按值传递,它是传递第一个元素,准确地说是第 0个 的指针。例如,如下声明 :void putValues( int[ 10 ] ); 被编译器视为 void putValues( int* ); 数组的长度与参数声明无关,因此,下列三个声明是等价的: // 三个等价的 putValues()声明 void putValues( int* ); void putValues( int[] ); void putValues( int[ 10 ] ); 因为数组被传递为指针 所以这对程序员有两个含义:1. 在被调函数内对参数数组的改变将被应用到数组实参上而不是本地拷贝上, 阅读全文
posted @ 2012-06-07 10:12 莫水千流 阅读(371) 评论(0) 推荐(0) 编辑
C++继承:共有,私有,保护
摘要:公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。1. 公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。2. 私有继承(private)私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。3. 保护继承(protected)保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。下面列出三种不同的继 阅读全文
posted @ 2012-05-31 17:00 莫水千流 阅读(624) 评论(0) 推荐(0) 编辑
第37条:避免对函数中继承得来的默认参数值进行重定义
摘要:让我们开门见山的讨论本话题:可以继承的函数可以分为两种:虚拟的和非虚拟的。然而,重定义一个非虚拟的派生函数始终是一个错误(参见第36条),因此,我们可以放心地将此处的讨论范围缩小至以下情况:继承一个含有默认参数值的虚函数。此情况下,本条目的证明问题则显得十分了然:虚函数是动态绑定的,而默认参数值是静态绑定的。你说啥?静态绑定于动态绑定之间的区别已经让你头晕目眩了?(静态绑定又称早期绑定,动态绑定又称晚期绑定,这是官方说法。)我们只好复习一下了。一个对象的静态类型就是你在对其进行声明时赋予它的类型。请考虑下面的类层次结构:Code highlighting produced by Actipro 阅读全文
posted @ 2012-05-23 09:18 莫水千流 阅读(1359) 评论(0) 推荐(2) 编辑
C++构造函数调用顺序
摘要:1、创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类);2、如果类里面有成员类,成员类的构造函数优先被调用;3、基类构造函数如果有多个基类则构造函数的调用顺序是某类在类派生表中出现的 顺序而不是它们在成员初始化表中的顺序;4、成员类对象构造函数如果有多个成员类对象则构造函数的调用顺序是对象在类中 被声明的顺序而不是它们出现在成员初始化表中的顺序;5、派生类构造函数 作为一般规则派生类构造函数应该不能直接向一个基类数据成员赋值而是把值传递 给适当的基类构造函数否则两个类的实现变成紧耦合的(tightly coupled)将更加难于 正确地修改或扩展基类的实现。(... 阅读全文
posted @ 2012-05-21 10:47 莫水千流 阅读(568) 评论(1) 推荐(0) 编辑
placement new(转)
摘要:今天看STL源码遇到一个问题:template <class _T1, class _T2>inline void _Construct(_T1* __p, const _T2& __value) { new ((void*) __p) _T1(__value);}上网搜到了一些文章,分享了:原帖地址: http://www.ksarea.com/articles/20080124_cc.htmlplacement new释疑"placement new"? 它到底是什么东东呀?我也是最近几天才听说,看来对于C++我还差很远呀!placement new 阅读全文
posted @ 2012-04-06 10:57 莫水千流 阅读(552) 评论(1) 推荐(1) 编辑
C++ new 解析重载 .
摘要:C++ new用法之一 new运算符最常用的是作为运算符的new,比如:string *str = new string(“test new”);作为运算符,new和sizeof一样,是C++内置的,你不能对它做任何的改变,除了使用它。new会在堆上分配一块内存,并会自动调用类的构造函数。C++ new用法之二 new函数第二种就是new函数,其实new运算符内部分配内存使用的就是new函数,原型是:void *operator new(size_t size);new函数返回的是一个void指针,一块未经初始化的内存。如你所见,这和C语言的malloc行为相似,你可以重载new函数,并且增加 阅读全文
posted @ 2012-04-06 10:11 莫水千流 阅读(6464) 评论(0) 推荐(1) 编辑
__cdecl,__fastcall, __stdcall 什么区别? .
摘要:函数参数入栈的方式 --------------------------------------------------------------- 在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式。 比如说__cdecl,它是标准的c方法的堆栈调用方式,就是在函数调用时的参数压入堆栈是与函数的声明顺序相反的,其它两个可以看MSDN,不过这个对我们编程没有太大的作用 --------------------------------------------------------------- 调用约定 调用约定(Calling convention)决定以下内容:函数参数的. 阅读全文
posted @ 2012-04-02 17:01 莫水千流 阅读(217) 评论(0) 推荐(0) 编辑
彻底了解指针数组,数组指针,以及函数指针 .
摘要:一 :关于指针和堆的内存分配 先来介绍一下指针 : 指针一种类型,理论上来说它包含其他变量的地址,因此有的书上也叫它:地址变量。既然指针是一个类型,是类型就有大小,在达内的服务器上或者普通的PC机上,都是4个字节大小,里边只是存储了一个变量的地址而已。不管什么类型的指针,char * ,int * ,int (*) ,string * ,float * ,都是说明了本指针所指向的地址空间是什么类型而已,了解了这个基本上所有的问题都好象都变的合理了。 在C++中,申请和释放堆中分配的存贮空间,分别使用new和delete的两个运算符来完成: 指针类型 指针变量名=new 指针类型 (初始化); 阅读全文
posted @ 2012-04-02 16:58 莫水千流 阅读(1705) 评论(1) 推荐(1) 编辑
const_cast dynamic_cast reinterpret_cast static_cast用法
摘要:const_cast 用法:const_cast<type_id> (expression) 该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。 常量指针被转化成非常量指针,并且仍然指向原来的对象; 常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。 Voiatile和const类试。举如下一例: class B{ public: int m_iNum; } void foo(){ const B b1; b1.m_iNum = 100;... 阅读全文
posted @ 2012-04-02 16:55 莫水千流 阅读(288) 评论(1) 推荐(0) 编辑
c++ static 关键字
摘要:++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下://Example 1#include <iostream.h>void fn();static int n; //定义静态全局变量void main(){ n=20; cout<<n<<endl; fn();}void fn(){ 阅读全文
posted @ 2012-04-02 16:48 莫水千流 阅读(211) 评论(0) 推荐(0) 编辑
c函数文件读写
摘要:typedef structtagMessageStatus{UIFormIDFormID;ulongulLayerID;UIStringIDenMessageID;} MessageStatus;static MessageStatus astMessageStatus [] = {{ID_Form_MSG_Normal_1,UI_LAYER_MSG_NORMAL,STRING_ID_Invalid},//MSG_NORMAL_1{ID_Form_MSG_Normal1_UnTouch,UI_LAYER_MSG_NORMAL,STRING_ID_Invalid},//MSG_NORMAL_1 阅读全文
posted @ 2012-04-01 17:11 莫水千流 阅读(586) 评论(1) 推荐(0) 编辑
fopen时w与wb的区别
摘要:今天做了个小程序,把一个二进制文件分割为多个1.44M的文件,但分割完成后,发现很多文件的大小都超过1.44M。在网上搜索了下,发现时fopen是的参数部队。 “w”表示为文本文件。用则会把文件中的“0A”变为“0D0A”,因为某些文件系统认为“0A”为文本文件的换行符,windows认为“0D0A”为文本文件的换行符,为了兼容其他文件系统(如从linux拷贝来的文件),windows上的fopen函数做了这样的格式转换。如果我记得没错的话,linux与vxworks上不会做这样的转换,所以可以说使用“w”,其属性要看所在的平台。 “wb参数”表示为二进制文件,则样文件系统会按纯粹的二进制格. 阅读全文
posted @ 2012-04-01 15:58 莫水千流 阅读(12840) 评论(0) 推荐(0) 编辑
C++字符换行 .
摘要:在C/C++语言中,可能我们要书写的一个字符串太长了,放在一行上影响代码的可读性。这时我们就需要多行书写了。字符串多行书写有两种规则:在字符串换行处加一个反斜杠’\’,下一行前不能有空格或者Tab键;使用双引号。程序示例:/** Introduction:* 测试C++中的字符串多行书写规则*/#include <iostream>#include <string>usingnamespace std;int main(){ //错误示例下一行前不能有空格 charchstr[] = "abcabc\ abcabc"; //错误示例'\ 阅读全文
posted @ 2012-04-01 10:43 莫水千流 阅读(30726) 评论(0) 推荐(1) 编辑
C++读写文件总结 .
摘要:在C++中如何实现文件的读写?一、ASCII 输出为了使用下面的方法, 你必须包含头文件<fstream.h>(译者注:在标准C++中,已经使用<fstream>取代< fstream.h>,所有的C++标准头文件都是无后缀的。)。这是 <iostream.h>的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, <iostream.h> 已经被<fstream.h>包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们,那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O操作。如果你猜是 阅读全文
posted @ 2012-01-12 23:51 莫水千流 阅读(28920) 评论(1) 推荐(1) 编辑

上一页 1 ··· 5 6 7 8 9
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示