c/c++
文章平均质量分 63
lidanny
这个作者很懒,什么都没留下…
展开
-
深入了解VC++编译器的使用
大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢? 闲话少说。我们先来看一下VC的处理流程,大致分为两步:编译和连接。源文件通过编译生成了.obj文件;所有.obj文件和.lib转载 2011-05-17 16:43:00 · 818 阅读 · 0 评论 -
explicit 构造函数的意义
在类的构造函数中, 凡是只带有一个参数的构造函数, 都定义了一组隐式转换, 把构造函数的参数类型转换成该类的类型;如:Smallint(int)把int型的值转化成Smallint值;extern void cacl(Smallint);int i;//需原创 2011-08-02 20:10:38 · 464 阅读 · 0 评论 -
成员初始化表
使用初始化表和在构造函数内使用数据成员的赋值之间有什么区别:inline Account:: Account( const char *name, double opening_bal ) : _name( name ), _balance( opening_bal原创 2011-08-02 22:47:06 · 378 阅读 · 0 评论 -
类模板中非类型参数的模板实参
1,绑定给非类型参数的表达式必须是一个常量表达式,即,它必须能在编译时被计算出结果。2,非 const 对象的值不是一个常量表达式,它不能被用作非类型模板参数的实参3,名字空间域中任何对象的地址,即使该对象不是const 类型,是一个常量表达式,而局部对象的地址则不是。原创 2011-08-04 21:56:19 · 798 阅读 · 0 评论 -
操作符重载
操作符->class ScreenPtr { // ... private: Screen *ptr; };// 支持指针行为的重载操作符 class ScreenPtr { public: Screen& operator*(原创 2011-08-03 22:47:40 · 328 阅读 · 0 评论 -
类模板中的友元声明
有三种友元声明可以出现在类模板中:1 非模板友元类或友元函数函数 foo() 成员函数bar()以及 foobar类都是类模板QueueItem的所有实例的友元class Foo { void bar(); }; template cla原创 2011-08-04 22:32:36 · 345 阅读 · 0 评论 -
声明与实现.h和.cpp
.h一般放类的声明, .cpp放类的定义; 1.如果实现不用inline关键字,要放到.cpp中。 两个以上文件包含.h,会出现重复定义错误already defined in。 原因:每个.cpp被编译成一个独立的.obj; 两个以上.cpp包含同一个.h而这个.h中原创 2011-05-11 12:01:00 · 788 阅读 · 0 评论 -
模板类中方法的声明与定义 unresolved external symbol
将模板类的声明放在.h中, 实现放在.cpp中结果出现unresolved external symbol;解决办法:包含编译模式:1.将实现一起放在.h中分离编译模式2.在.h中使用export(编译器要支持, 很多貌似不支持)// ----- Queue.h -----原创 2011-05-05 11:28:00 · 1650 阅读 · 0 评论 -
C++中构造函数调用构造函数
最近在整理C++知识的时候,突然想到如何在C++中实现构造函数调用构造函数的问题,常见的错误是按照如下方式来调用: 1: #include 2: 3: class Test 4: { 5: public: 6: int m_a;转载 2011-08-10 23:24:07 · 497 阅读 · 0 评论 -
c++类中成员的构造顺序
先调用父类的构造函数,然后是各成员的初始化, 各成员的默认构造函数,然后是自己的构造函数。class a{public: a() { cout }};class combinebase{public原创 2011-08-11 11:36:44 · 427 阅读 · 0 评论 -
C++中析构函数为什么要是虚函数
////////////////////////////////////////////////////////Example 1 ////////////////////////////////////////////////////// #includ转载 2011-08-17 22:50:12 · 370 阅读 · 0 评论 -
多继承下成员访问
编译器先解析出他对某个名称该使用哪个实例, 然后再检查实例的访问权限是否合法#include class Base1 { public: // ... protected: int ival; double dval;原创 2011-08-25 09:52:30 · 331 阅读 · 0 评论 -
虚拟基类的初始化
无论虚拟基类出现在继承层次中的哪个位置上,它们都是在非虚拟基类之前被构造虚拟基类的初始化成了最末层继承类的责namespace Ex18_15{ class Base { public: Base(){cout原创 2011-08-29 11:56:45 · 303 阅读 · 0 评论 -
指向数组的指针,指向函数的指针
指向数组的指针:int(*p)[5];定义了一个指向数组元素为int型的元素个数为5的一维数组;也可以理解为二维数组的首元素就像int*p指向int型可以理解为一维数组的首元素;也可以理解为*p为一个指针,指针里面的内容是一个有5个int值的数组;*p=a[5];原创 2011-07-23 11:23:09 · 383 阅读 · 0 评论 -
需要指定模板函数参数的两种必要情况
1.当参数推演失败, 产生ambiguous,可以明白指定参数min5(dobj, fobj);2.当编译器无法推演出返回类型时template T1 sum(T2, T3);指定参数时, 只有尾部的参数可以不写如:sum(fobj, dobj);//返回原创 2011-07-30 15:48:58 · 420 阅读 · 0 评论 -
键盘输入EOF,在istream_iterator中, 不输入EOF死循环
windows中是ctrl+z但是我在vc6下不好使, 有时候要要好几下,有时候ctrl+z后要回车,可以用ctrl+a,也可以用ctrl+d;linux下是ctrl+d istream_iterator iput(cin), eos;原创 2011-07-30 19:16:33 · 576 阅读 · 0 评论 -
二维数组
int a[][];错误,多维数组的规则是 只有最后一维的大小能省略, 可以定义为int a[][5];int (*pa)[];不好,应该int (*pa)[size];声明可以, 但是赋值的时候就会有错误,例如:int a[] = {1, 2, 3};pa = &a;//can原创 2011-07-23 21:38:25 · 221 阅读 · 0 评论 -
stdafx.h
简介 名称的英文全称为:Standard Application Framework Extensions 所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件转载 2011-07-24 11:52:05 · 613 阅读 · 0 评论 -
基类和派生类的成员访问
#include using namespace std; class Cbase { public: Cbase(int x = 0, int y = 0, int z = 0):a(x), b(y), c(z){}; voi原创 2011-05-26 12:55:00 · 4939 阅读 · 0 评论 -
引用相关
const 引用:1. int i = 20; const int& refer = i; i = 12;可以, refer的值会变, 但是不能给refer赋值2 int i = 20; int* &rval = &i;错误, a refrence原创 2011-07-23 11:54:43 · 257 阅读 · 0 评论 -
VC++ warning C4786 详解
在使用std::list的过程中, 编译器报warning 如下:warning C4786: 'std::reverse_bidirectional_iterator,std::allocator >,std::allocator,std::allocator > > >::i转载 2011-07-24 11:18:04 · 623 阅读 · 0 评论 -
运算符优先级
醋坛酸味灌,味落跳福逗醋, 初等:4个,(), [], ->, .;坛, 单目, 9个, !, ~, ++, --, -(负号), +, *, &, sizeof酸, 算术, 5个, *, /, %, +, -味, 位移, 2个, >灌, 关系, 6个, , =, ==, !=味原创 2011-07-24 16:42:38 · 363 阅读 · 0 评论 -
const 和 非const函数重载
const a a1;a a2;a1.x();a2.x();a1调用const版本,a2调用非const版本。后面加const表示在该函数中不能对类的数据成员进行改变,比如:class A{private: int aa;public: int x()转载 2011-07-16 20:05:44 · 664 阅读 · 0 评论 -
函数对象
函数对象的实现简单形式包括一个被重载的函数调用操作符, 如下:还可以加入模板, 或者加入构造函数, 添加私有成员等class Lessthan{public:bool operator()(int a, int b){return a原创 2011-07-30 12:49:24 · 225 阅读 · 0 评论 -
程序段的Class Scope
如果class member的定义在class body之外, 那么从该定义的member名称开始出现到定义结束为止,都属于class scope,但是前边的返回类型不属于class scope。如:typedef int Type;Type initVal();原创 2011-07-31 17:37:19 · 543 阅读 · 0 评论 -
带缺省参数的重复声明
char *screenInit(int height, int width, char background = ' ');char *screenInit(int height = 4, int width = 4, char background);正确;char *scr原创 2011-07-23 22:23:55 · 282 阅读 · 0 评论 -
忘记using namespace std;
在写程序时 经常莫名其妙的出现一些 未定义错误,如下面, 是因为用了c++的名字空间std中的类型;忘了加上using namespace std;语句error C2143: syntax error : missing '; ' befor原创 2011-07-30 11:22:00 · 327 阅读 · 0 评论 -
effective C++ 条款 1:尽量用const和inline而不用#define
effective C++ 条款 1:尽量用const和inline而不用#define尽量用编译器而不用预处理#define ASPECT_RATIO 1.653 它会被预处理程序去掉,于是ASPECT_RATIO不会加入到符号列表中定义指针常量时会有点不同 要原创 2011-10-10 00:45:55 · 486 阅读 · 0 评论