wly603

随笔分类 -  C/C++

C++函数名字的隐藏:重写、重载、重定义
摘要:概要: C++中经常出现函数名字一样,但参数列表或返回值不同的函数,要搞清楚函数的正确调用关系,需理清三个概念:重写(override)、重载(overload)、重定义(redefine)。一、三个基本概念 1、重定义(redefine):派生类对基类的成员函数重新定义,即派生类定义了某个函数,该函数的名字与基类中的函数名字一样。 特点:(1)不在同一个作用域(分别位于基类、派生类) (2)函数的名字必须相同 (3)对函数的返回值、形参列表无要求 特殊情况:若派生类定义的该函数与基类的成员函数完全一样(返回值、形参列表均相同),且基类的该函数为virtual,则属于... 阅读全文

posted @ 2012-05-26 12:32 wly603 阅读(3755) 评论(3) 推荐(1)

C、C++、java中函数的参数:传值 or 传引用
摘要:概要: 教C语言课的过程中,发现很多学生对函数调用中的参数传递问题很容易糊涂。跟师弟交流的过程中,也发现大家对这个问题理解不够透彻。因此,结合本人自己的理解,将函数调用中的传值与传引用进行分析总结。一、函数调用中传递参数的类型 传值(pass by value):即形参接收实参传递过来的值,如果是自定义类型,要调用拷贝构造函数。函数处理的是形参的值。 传引用(pass by reference):引用表示与原对象完全相同,是同一个对象。若函数的形参是引用,则实参与形参间不存在参数传递,且函数内对形参的修改就是修改实参,因为它们是引用关系,是同一个对象。 1、C语言中,传递的参数类型只... 阅读全文

posted @ 2012-05-23 15:32 wly603 阅读(3457) 评论(5) 推荐(1)

C++中多态性、类成员的访问问题
摘要:概要: C++的多态性是通过关键字virtual指定的, 而Java中,动态绑定是默认的处理方式,java中不需要将方法声明为虚方法。 因此,在C++中要结合类成员的访问控制符、virtual关键字,来分析调用的是哪个成员函数,是否发生多态。一、规则总结 1、对象只能访问类的public成员,对象只能访问本类声明的public成员和public函数 2、派生类可以访问父类的public、protected成员 3、有继承时,public继承,继承后父类成员的属性不变 protected继承,继承后父类public成员变为protected priva... 阅读全文

posted @ 2012-05-19 13:50 wly603 阅读(1757) 评论(3) 推荐(1)

C++多个构造函数的问题
摘要:概要: 在C++中,每一个类都会有一个或多个构造函数,一个析构函数,一个赋值函数。 构造函数,包括:无参构造、有参构造、拷贝构造 本文主要是理解各构造函数的调用问题,即定义一个对象后,调用的是哪个构造函数。一、知识总结当我们定义一个空类时,编译器默认会产生4个成员函数:默认无参构造函数、拷贝构造函数、赋值函数、析构函数。其中默认的拷贝构造函数是浅拷贝。如果我们在类中声明了构造函数,那么系统不再提供默认构造函数,此时如果还需要无参构造函数,则需要自己重载构造函数。调用时,把握一点: 1、定义一个新对象时,一定会有个构造函数被调用。根据定义时所赋的初始值来决定该调用哪个构造函数。初始化时... 阅读全文

posted @ 2012-05-15 14:25 wly603 阅读(5900) 评论(0) 推荐(0)

查找方法--从静态表到动态表
摘要:概要: 数据结构学习的笔记:查找的一些方法。各种方法的具体描述和特点,烦请参考数据结构的课本,或直接google 针对数据存储结构的不一样,查表方法分为: 静态表:顺序,折半,分块查找 动态表:二叉排序树、平衡二叉树一、具体方法介绍 1、针对静态表 (法1)顺序查找:适合于存储结构为顺序存储或链接存储的线性表。 顺序查找/* 顺序查找 适合于存储结构为顺序存储或链接存储的线性表。 查找关键字为key 的记录 输入:待查数组 s[0]----s[n-1],共n个数 输出:成功,返回序号 失败,返回-1*/i... 阅读全文

posted @ 2012-05-08 12:22 wly603 阅读(553) 评论(0) 推荐(0)

各种排序算法的总结
摘要:概要: 这是本人以前学习数据结构时,写的一些排序算法。今天整理一下,方便以后查阅。 本文实现的排序算法包括:直接插入排序、折半插入排序、2路插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序一、具体实现 关于各算法的特点和思想原理,本文不作介绍,需要了解的,可查阅数据结构书籍,或直接google 直接插入排序//直接插入排序:参数:待排序数据,数据个数void InsertSort( int nData[], int nNum){ int temp= 0; //哨兵 int i,j; for (i = 1;i<nNum;i++) { ... 阅读全文

posted @ 2012-05-08 09:20 wly603 阅读(347) 评论(0) 推荐(0)

c语言静态变量和静态函数
摘要:static C语言 C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数。而内部变量是指定义在函数内部的函数参数及变量。外部变量定义在函数之外,因此可以在许多函数中使用。由于C语言不允许在一个函数中定义其它函数,因此函数本身只能是“外部的”。 由于C语言代码是以文件为单位来组织的,在一个源程序所有源文件中,一个外部变量或函数只能在某个文件中定义一次,而其它文件可以通过extern声明来访问它(定义外部变量或函数的源文件中也可以包含对该外部变量的extern声明)。 而static则可以限定变量或函数为静态存储。如果用static限定外部变量与函数,则可以将该对象的作用域限定为 阅读全文

posted @ 2012-04-11 11:50 wly603 阅读(21745) 评论(2) 推荐(0)

c++中记录程序运行时间的函数
摘要:在C++的库函数中,我们可以使用clock()来计算程序的运行时间,主要使用一下三个函数类型及函数:1、clock_t:数据类型,其实,当你打开time.h就知道了,就是个long型,用来记录一段时间内的clocks数,即CPU的运行单元时间;2、clock():返回类型clock_t,返回的是从程序开始,到你调用clock()函数这段时间的clocks;3、CLOCKS_PER_SEC:它用来表示一秒钟会有多少个时钟计时单元,即: #define CLOCKS_PER_SEC ((clock_t)1000) 可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。下面举个例子 阅读全文

posted @ 2012-04-11 11:49 wly603 阅读(3355) 评论(0) 推荐(0)

从STL中的list删除元素
摘要:主要是注意删除末尾的元素时,需要注意测试代码#include <iostream>#include <list>#include <algorithm>using namespace std;int main(int argc, char* argv[]){ list<int> MyList; for (int i = 0; i < 10; i++) { MyList.push_back(i); } list<int>::iterator Itor; for ( Itor = MyList.begin(); Itor ... 阅读全文

posted @ 2012-04-11 10:45 wly603 阅读(246) 评论(0) 推荐(0)

从一道面试题看深拷贝、浅拷贝构造函数问题
摘要:《程序员面试宝典》P99请看下面的程序,说说会出现什么问题?View Code #include <iostream>#include <cstdlib>#include <vector> using namespace std; class CDemo { public: CDemo():str(NULL){}; ~CDemo() { if(str) delete[] str; }; char* str; }; int main(int argc, char** argv) { C... 阅读全文

posted @ 2012-04-11 10:43 wly603 阅读(1222) 评论(0) 推荐(0)

用一个宏定义FIND求一个结构体CTYPE里某个变量CNUM相对了CTYPE的编移量
摘要:用一个宏定义FIND求一个结构体CTYPE里某个变量CNUM相对了CTYPE的编移量。如:stuct student { int a; char b[20]; double ccc; }则:FIND(student,a); //等于0FIND(student,b);//等于4#define FIND( struc, e ) (size_t)&(((struc*)0)- >e)(struc*)0----------表示将常量0强制转化为struc *型指针所指向的地址&(((struc*)0)- >e)--表示取结构体指针(struc*)0的成员e的地址,因为该结构体 阅读全文

posted @ 2012-04-11 10:38 wly603 阅读(261) 评论(0) 推荐(0)

C模拟实现C++的多态
摘要:用c语言中的结构体模拟类,用函数指针模拟虚函数表。整个程序用于模拟C++中的多态性,即用基类访问派生类的函数。View Code // c语言模拟多态性#include "stdio.h"#include "stdlib.h"enum ShapeType{CIRCLE,SQUARE,RECTANGLE};//形状类型//建立虚函数表,2个虚函数typedef struct { void (*ShowShape)(); double (*CalArea)(int w);}vtable;//建立基类typedef struct{ vtable *vptr_b 阅读全文

posted @ 2012-04-11 10:36 wly603 阅读(1532) 评论(0) 推荐(0)

PeekMessage与GetMessage的对比
摘要:PeekMessage与GetMessage的对比相同点:PeekMessage函数与GetMessage函数都用于查看应用程序消息队列,有消息时将队列中的消息派发出去。不同点:无论应用程序消息队列是否有消息,PeekMessage函数都立即返回,程序得以继续执行后面的语句(无消息则执行其它指令,有消息时一般要将消息派发出去,再执行其它指令)。GetMessage函数只有在消息对立中有消息时返回,队列中无消息就会一直等,直至下一个消息出现时才返回。在等的这段时间,应用程序不能执行任何指令。(从他们的不同点上来看,PeekMessage函数有点像“乞丐行乞”,有你就施舍点,没有也不强求。GetM 阅读全文

posted @ 2012-04-11 10:31 wly603 阅读(220) 评论(0) 推荐(0)

预编译头文件(precompiled header)
摘要:今天调试程序,碰到一个错误:fatal error C1010: unexpected end of file while looking for precompiled header directive分析:工程头文件处理的错误。解决:1、Project Setting-> C/C++ -> Category(Precompiled header)-> not using Precompiled header2、如果使用的是Win32工程,可能就是错误文件没有包含:#include "stdafx.h" ,添加该包含即可。详细理解,参考:http://w 阅读全文

posted @ 2012-04-11 10:22 wly603 阅读(358) 评论(0) 推荐(0)

C语言之条件编译
摘要:一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是只对一部分内容进行编译,这就是“条件编译”。 条件编译形式一为: #ifdef 标识符 程序段1 #else 程序段2 #endif 作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。 例如,在调试程序时,常常希望输出一些所需的信息,而在调试完成后不再输出这些信息。可以在源程序中插入以下的条件编译段: #ifdef DEBUG print ("device_open(%p)\n", file); #endif 如果在它的 阅读全文

posted @ 2012-04-11 10:20 wly603 阅读(906) 评论(0) 推荐(0)

导航