随笔分类 -  C/C++笔记

上一页 1 2 3 4 下一页

C++ 组合
摘要:如果鸟是可以飞的,那么鸵鸟是鸟么?鸵鸟如何继承鸟类?[美国某著名分析软件公司2005年面试题] 解析:如果所有鸟都能飞,那鸵鸟就不是鸟!回答这种问题时,不要相信自己的直觉!将直觉和合适的继承联系起来还需要一段时间。 根据题干可以得知:鸟是可以飞的。也就是说,当鸟飞行时,它的高度是大于0的。鸵鸟是鸟类(生物学上)的一种。但它的飞行高度为0(鸵鸟不能飞)。 不要把可替代性和子集相混淆。即使鸵鸟集是鸟集的一个子集(每个驼鸟集都在鸟集内),但并不意味着鸵鸟的行为能够代替鸟的行为。可替代性与行为有关,与子集没有关系。当评价一个潜在的继承关系时,重要的因素是可替代的行为,而不是子集。 答案:如果一定要让鸵 阅读全文

posted @ 2011-08-02 20:05 原来... 阅读(3282) 评论(0) 推荐(0)

Determining the Size of a Class Object----sizeof(class)
摘要:Determining the Size of a Class ObjectBy Girish ShettyThere are many factors that decide the size of an object of a class in C++. These factors are:Size of all non-static data members Order of data members Byte alignment or byte padding Size of its immediate base class The existence of virtual funct 阅读全文

posted @ 2011-08-02 17:53 原来... 阅读(715) 评论(0) 推荐(0)

构造函数不能是虚函数的原因
摘要:构造函数不能声明为虚函数的原因是:所谓虚函数就是多态情况下只执行一个,而从继承的概念来讲,总是要先构造父类对象,然后才能是子类对象,如果构造函数设为虚函数,那么当你在构造父类的构造函数时就不得不显示的调用构造,还有一个原因就是为了防错,试想如果你在子类中一不小心重写了个跟父类构造函数一样的函数,那么你的父类的构造函数将被覆盖,也即不能完成父类的构造.就会出错. 阅读全文

posted @ 2011-08-02 15:00 原来... 阅读(373) 评论(0) 推荐(1)

C++类中的常量
摘要:C++类中的常量由于#define 定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用 const 修饰数据成员来实现。const 数据成员的确是存在的,但其含义却不是我们所期望的。const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其 const 数据成员的值可以不同。 不能在类声明中初始化 const 数据成员。以下用法是错误的,因为类的对象未被创建时,编译器不知道 SIZE 的值是什么。 Code highlighting produced by Actipro CodeHighlighter (freeware)http 阅读全文

posted @ 2011-08-02 14:41 原来... 阅读(9070) 评论(1) 推荐(4)

C++ explicit的作用
摘要:explicit作用:在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。explicit使用注意事项: * explicit 关键字只能用于类内部的构造函数声明上。 * explicit 关键字作用于单个参数的构造函数。 * 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换例子:未加explicit时的隐式类型转换 1. class Circle 2. { 3. public: 4. Circle(double r) : R(r) {} 5. Circl 阅读全文

posted @ 2011-08-02 09:57 原来... 阅读(101903) 评论(7) 推荐(11)

C++符号优先级
摘要:PrecedenceOperatorDescriptionExampleAssociativity1()[]->.::++--Grouping operatorArray accessMember access from a pointerMember access from an objectScoping operatorPost-incrementPost-decrement(a + b) / 4;array[4] = 2;ptr->age = 34;obj.age = 34;Class::age = 2;for( i = 0; i < 10; i++ ) ...for 阅读全文

posted @ 2011-08-01 11:41 原来... 阅读(2211) 评论(0) 推荐(0)

优先队列(priority_queue)的C语言实现(转)
摘要:优先队列(priority_queue)的C语言实现 优先队列(priority_queue)和一般队列(queue)的函数接口一致,不同的是,优先队列每次出列的是整个队列中最小(或者最大)的元素。 本文简要介绍一种基于数组二叉堆实现的优先队列,定义的数据结构和实现的函数接口说明如下:一、键值对结构体:KeyValue// =============KeyValue Struct==================================typedef struct key_value_struct KeyValue;struct key_value_struct{int _key;v 阅读全文

posted @ 2011-07-31 11:49 原来... 阅读(11700) 评论(0) 推荐(0)

基于哈夫曼(haffuman)算法的文件压缩的实现(C语言)(转)
摘要:本文首先简要阐述哈夫曼算法的基本思想,然后介绍了使用哈夫曼算法进行文件压缩和解压缩的处理步骤,最后给出了C语言实现的文件压缩和解压缩的源代码。 哈夫曼算法的主要思想是: ①首先遍历要处理的字符串,得到每个字符的出现的次数; ②将每个字符(以其出现次数为权值)分别构造为二叉树(注意此时的二叉树只有一个节点);③取所有二叉树种种字符出现次数最小的二叉树合并为一颗新的二叉树,新二叉树根节点的权值等于两个子节点的权值之和,新节点中的字符忽略;④重复过程③直到所有树被合并为同一棵二叉树⑤遍历最后得到的二叉树,自顶向下按路径编号,指向左节点的边编号0,指向右节点的边编号1, 从根到叶节点的所有边上的0和1 阅读全文

posted @ 2011-07-30 22:12 原来... 阅读(6914) 评论(0) 推荐(0)

函数参数的传递问题->指针和内存
摘要:程序1:void myMalloc(char *s) //我想在函数中分配内存,再返回{s=(char *) malloc(100);}void main(){char *p=NULL;myMalloc(p); //这里的p实际还是NULL,p的值没有改变,为什么?if(p) free(p);}程序2:void myMalloc(char **s){*s=(char *) malloc(100);}void main(){char *p=NULL;myMalloc(&p); //这里的p可以得到正确的值了if(p) free(p);}程序3:#include<stdio.h> 阅读全文

posted @ 2011-07-30 15:38 原来... 阅读(1007) 评论(0) 推荐(0)

关于一道算法题《编写算法,从10亿个浮点数当中,选出其中最大的10000个》(转)
只有注册用户登录后才能阅读该文。

posted @ 2011-07-29 21:36 原来... 阅读(76) 评论(2) 推荐(0)

C/C++返回但其执行行和文件名
摘要:#include<iostream>using namespace std;int main(){int line=__LINE__;char *file=__FILE__;cout<<line<<endl<<file<<endl;return 0;} 阅读全文

posted @ 2011-07-28 09:09 原来... 阅读(239) 评论(0) 推荐(0)

C/C++对汉字的读取
摘要://怎么读取汉字#include<stdio.h>#include<stdlib.h>int main(){ FILE *fp; if((fp=fopen("D:\\123.txt","r"))==NULL) { printf("Error!\n"); exit(0); } //假设d盘的123.txt中有四个汉字:好好学习,下面的部分输出第一个汉字 char ch[3]; int i; for(i=0;i<2;i++) ch[i]=getc(fp); ch[i]='\0'; puts(c 阅读全文

posted @ 2011-07-26 14:32 原来... 阅读(19939) 评论(0) 推荐(0)

++a a++
摘要:++a是先自增,然后返回增加后的变量a,a是变量,本来就可以做左值,所以(a++)++正确;a++是后自增——在表达式里值还是原来的值——返回的是一个等于a+1的临时变量,临时变量是有const属性的,不可以更改,所以(a++)++错误。 阅读全文

posted @ 2011-07-22 15:55 原来... 阅读(337) 评论(0) 推荐(0)

友元函数、类的非静态成员函数、静态成员函数的区别
摘要:类中申明的函数相对于类来说有三层意思:1.有this指针2.函数在类的作用区域中3.可以访问类中私有部分4.可以被继承非静态成员函数具有1234静态成员函数具有234友元函数具有3静态成员函数与友元函数的区别只是作用区域的不同 友元函数具有全局性 不慎使用可能会造成函数同名冲突虽然命名空间能解决一定的问题,但我还是偏向使用静态成员函数= =1.静态成员函数的地址可用普通函数指针储存,而普通成员函数地址需要用 类成员函数指针来储存。举例如下: class base{ static int func1(); int func2(); }; int (*pf1)()=&base::func1 阅读全文

posted @ 2011-07-21 21:02 原来... 阅读(3522) 评论(0) 推荐(1)

C++ template
摘要:1.自定义Stack模板类#include <vector>#include <stdexcept>template <typename T>class Stack { private: std::vector<T> elems; // elements public: void push(T const&); // push element void pop(); // pop element T top() const; // return top element bool empty() const { // return whet 阅读全文

posted @ 2011-07-21 09:40 原来... 阅读(1057) 评论(0) 推荐(0)

类模板 与 模板类
摘要:1.类模板与模板类的概念⑴什么是类模板一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表着一类类。⑵类模板定义定义一个类模板,一般有两方面的内容:A.首先要定义类,其格式为:template <class T>class foo{……}foo为类名,在类定义体中,如采用通用数据类型的成员,函数参数的前 阅读全文

posted @ 2011-07-21 09:20 原来... 阅读(21308) 评论(2) 推荐(3)

C/C++回调函数
摘要:对于很多初学者来说,往往觉得回调函数很神秘,很想知道回调函数的工作原理。本文将要解释什么是回调函数、它们有什么好处、为什么要使用它们等等问题,在开始之前,假设你已经熟知了函数指针。 什么是回调函数? 简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。 为什么要使用回调函数? 因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。 如果想知道回调函数在实际中有什么作用,先假设有这样一种情况, 阅读全文

posted @ 2011-07-20 16:39 原来... 阅读(55085) 评论(7) 推荐(5)

VC++,掀起你的盖头来——谈VC++对象模型(转)
摘要:译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。Inside the C++ Object Model虽然是一本好书,然而,书的篇幅多一些,又和具体的VC++关系小一些。因此,从篇幅和内容来看,译者认为本文是深入理解C++对象模型比较好的一个出发点。这篇文章以前看到时就觉得很好,旧文重读,感觉理解得更多一些了,于是产生了翻译出来,与大家共享的想法。虽然文章不长,但时间有限,又若干次在翻译时打盹睡着,拖拖拉拉用了小一个月。一方面因本人水平所限,另一方面因翻译时经常打盹,错误之处恐怕不少,欢迎 阅读全文

posted @ 2011-07-19 11:30 原来... 阅读(698) 评论(0) 推荐(0)

C/C++四种线程同步
摘要:1.Critical SectionA.速度快B.不能用于不同进程C.不能进行资源统计(每次只可以有一个线程对共享资源进行存取)2.MutexA.速度慢B.可用于不同进程C.不能进行资源统计3.SemaphoreA.速度慢B.可用于不同进程C.可进行资源统计(可以让一个或超过一个线程对共享资源进行存取)4.EventA.速度慢B.可用于不同进程C.可进行资源统计 阅读全文

posted @ 2011-07-19 10:54 原来... 阅读(536) 评论(0) 推荐(0)

什么能在main()函数之前或之后执行
摘要:C/C++ main()主函数执行前和执行后还能运行其它的吗?答案: 可以例如:#include<iostream>#include<string>using namespace std;string str="预备......";cout<<str<<endl;int fn1(){cout<<"中间"<<endl;return 0;}int main(){cout<<"开始"<<endl;_onexit(fn1);cout<< 阅读全文

posted @ 2011-07-19 09:56 原来... 阅读(766) 评论(0) 推荐(0)

上一页 1 2 3 4 下一页

导航