极速多用户网页音乐播放器(框架固定形式/底部音乐播放器)
<div><p>此网页使用了框架,但您的浏览器不支持框架。</p></div>

随笔分类 -  C/C++

static_cast、dynamic_cast reinterpret_cast和const_cast的用法
摘要:标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。static_cast用法:static_cast < type-id > ( expression_r_r )该运算符把expression_r_r转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: 用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不 阅读全文

posted @ 2013-06-16 22:46 飞鼠溪 阅读(225) 评论(0) 推荐(0)

构造函数和析构函数的说明
摘要:1、构造函数不允许为虚函数,因为虚函数会有指向虚函数列表的指针;对象生成的过程为:先申请内存,然后调用构造函数生成对象。2、析构函数可以为虚函数,且存在子类的类最好是定义为虚函数,否则会造成删除指向子对象的父指针时不能调用子对象的析构函数。3、析构函数可以为纯虚函数,但必须把它实现,否则会编译不能通过,因为子对象仍是要调用父类的析构函数。4、一个不包含任何成员变量只有非虚成员函数的类,其大小为1字节。如果存在虚函数,则其大小为4字节,不管有多少虚函数,均为4字节。5、必须使用类参数初始化列表的情形:A,类中包含带参数的构造函数的对象;B,类中包含const变量;C,类中包含引用类型。 阅读全文

posted @ 2013-06-16 22:41 飞鼠溪 阅读(332) 评论(0) 推荐(0)

类中拷贝构造函数和赋值构造函数的区别
摘要:假如存在以下代码:class Test{};int main(){ Test A; Test B(A); //调用拷贝构造函数 Test C = A; //调用拷贝构造函数 B = A; //此处才调用赋值构造函数}以下给出测试代码: 1 #include <iostream> 2 #include <stdlib.h> 3 using namespace std; 4 5 class AAA 6 { 7 public: 8 AAA() 9 {10 value++;cout << "value is " << value... 阅读全文

posted @ 2013-06-14 00:05 飞鼠溪 阅读(365) 评论(0) 推荐(0)

不用+和-实现变量加1的代码
摘要:看到一个面试题,要求不用+和-实现变量加1操作。就写了下,不知道有没有更简单的。代码如下: 1 #include<iostream> 2 3 using std::cout; 4 using std::cin; 5 using std::endl; 6 7 int main() 8 { 9 while(1)10 {11 int result = 0;12 cout << "input data:";13 cin >> result;14 15 if (result % 2)16 {17 ... 阅读全文

posted @ 2013-05-16 18:17 飞鼠溪 阅读(205) 评论(0) 推荐(0)

线程处理函数pthread_cleanup_push / pthread_cleanup_pop
摘要:线程可以安排它退出时需要调用的函数,这样的函数称为线程清理处理程序,线程可以建立多个清理处理程序。处理程序记录在栈中,也就是说它们的执行顺序与它们注册时的顺序相反。它主要用来处理内存泄露,尤其是处理死锁。 pthread_cleanup_push来注册清理函数rtn,这个函数有一个参数arg。在以下三种情形之一发生时,注册的清理函数被执行: 1)调用pthread_exit。 2)作为对取消线程请求(pthread_cancel)的响应。 3)以非0参数调用pthread_cleanup_pop。 注意: 1)如果线程只是由于简单的返回而终止的,则清除函数不会被调用... 阅读全文

posted @ 2013-05-14 22:48 飞鼠溪 阅读(249) 评论(0) 推荐(0)

exit、_exit、abort、return的区别
摘要:_exit():跟exit功能大致相同,区别在于_exit不会清空所有缓冲区,关闭所有I/O通道exit():在调用时,会做大部分清理工作,但是决不会销毁局部对象,因为没有stack unwinding。会进行的清理工作包括:销毁所有static和global对象,清空所有缓冲区,关闭所有I/O通道。终止前会调用经由atexit()登录的函数,atexit如果抛出异常,则调用terminate()。abort():调用时,不进行任何清理工作。直接终止程序。retrun:调用时,进行stack unwinding,调用局部对象析构函数,清理局部对象。如果在main中,则之后再交由系统调用exit 阅读全文

posted @ 2013-05-14 21:25 飞鼠溪 阅读(299) 评论(0) 推荐(0)

Tinyxml的简单用法
摘要:生成或解析的XML如下(代码的头文件未包含,只是测试,所以未检查空指针):View Code 1 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 2 <Student> 3 <ComputerStu Name="Jack" Age="22" Sex="male"> 4 <Addr>Nan Jing City 5 <!--Student Address--&g 阅读全文

posted @ 2013-04-27 13:56 飞鼠溪 阅读(165) 评论(0) 推荐(0)

(转)#pragma指令用法 字节对齐问题 .
摘要:转载自:http://www.jysls.com/thread-19975-1-1.html在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #Pragma Para 其中Para 为参数,下面来看一些常用的参数。 (1)message 参数。 Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗 口中输出相应 阅读全文

posted @ 2013-04-20 00:10 飞鼠溪 阅读(188) 评论(0) 推荐(0)

(转)const 在C C++ 中的使用 和 区别
摘要:一、C中CONST的使用来自:http://blog.chinaunix.net/u/26828/showart_667881.htmlconst是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。 虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。 问题1:const变量 & 常量 为什么我象下面的例子一样用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢? ... 阅读全文

posted @ 2013-04-20 00:09 飞鼠溪 阅读(276) 评论(1) 推荐(0)

(转)C 运行时库 /MT /MTD /MD /MDD
摘要:VC编译选项多线程 (/MT)多线程调试(/MTd)多线程 DLL(/MD)多线程调试 DLL (/MDd)C 运行时库库文件Single thread(static link) MLlibc.libDebug single thread(static link) MLdlibcd.libMultiThread(static link) MTlibcmt.libDebug multiThread(static link) MTdlibcmtd.libMultiThread(dynamic link) MDmsvert.libDebug multiThread(dynamic link) MD. 阅读全文

posted @ 2013-04-19 23:58 飞鼠溪 阅读(196) 评论(0) 推荐(0)

一个简单的服务器和客户端的心跳程序
摘要:程序是基于TCP的,只是为了测试,功能并不完善。大多数的心跳都是UDP协议。当服务器端的数据和心跳在同一端口时,TCP协议很容易出现心跳被阻塞的情况。服务器端代码:View Code 1 #include <unistd.h> 2 #include <arpa/inet.h> 3 #include <netinet/in.h> 4 #include <sys/socket.h> 5 #include <iostream> 6 #include <string.h> 7 #include <cstdlib> 8 阅读全文

posted @ 2013-04-15 23:25 飞鼠溪 阅读(541) 评论(0) 推荐(0)

使用Select编写多客户连接的网络服务器
摘要:select系统条用允许程同时在多个底层文件描述符上等待输入的到达(或输出的完成)。一般在linux系统上,标准输入的文件描述符是0;标准输出的文件描述符是1;标准错误的文件描述符是2;在Posix定义分别定义为:STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO他们都包含在unistd.h头文件中以下代码对于并发连接并不能够同时处理,可以在数据处理部分起多线程处理服务器端代码如下(客户端代码不做修改):View Code 1 #include <sys/types.h> 2 #include <sys/socket.h> 3 #inclu 阅读全文

posted @ 2013-04-15 21:03 飞鼠溪 阅读(174) 评论(0) 推荐(0)

简单网络编程(Linux)
摘要:客户端通信流程:1)、创建ClientSocket2)、初始化ServerAddr3)、连接到服务器connect4)、利用write、read进行读写操作5)、关闭ClientSocket简单代码如下:View Code 1 #include <netinet/in.h> 2 #include <arpa/inet.h> 3 #include <unistd.h> 4 #include <iostream> 5 #include <sys/socket.h> 6 #include <cstdlib> 7 8 using 阅读全文

posted @ 2013-04-15 20:12 飞鼠溪 阅读(134) 评论(0) 推荐(0)

进程间socket通信
摘要:服务端代码:View Code 1 #include <sys/un.h> 2 #include <unistd.h> 3 #include <iostream> 4 #include <sys/socket.h> 5 6 using std::cout; 7 const int MAX_DATA_LEN = 255; 8 9 int main(int argc, char** argv)10 {11 int server_sockfd = 0;12 int client_sockfd = 0;13 int server_len = 0;14 i 阅读全文

posted @ 2013-04-15 14:51 飞鼠溪 阅读(126) 评论(0) 推荐(0)

函数模板的简单用法
摘要:对于形参类型不一样,函数体一样的函数,最好使用模板以免定义多个函数类型定义使用typename或class大多数都一样,但在用于嵌套场景时只能用typename。所以在任何情况下用typename都不会错简单比较代码如下:View Code 1 template <typename T> 2 int compare(const T& v1, const T& v2) 3 { 4 if (v1 > v2) 5 { 6 return -1; 7 } 8 else if (v1 < v2) 9 {10 return 1;11 ... 阅读全文

posted @ 2013-04-15 11:05 飞鼠溪 阅读(140) 评论(1) 推荐(0)

类模板的简单用法
摘要:本次作业需要你实现一个用于存储整型数据的队列类(class IntQueue)。要求如下: 产生队列的时候可以指定队列的大小,默认的大小是最大10个元素,。 出于简单考虑,本次作业中实现队列用数组方式就可以了。 注意完成合适的构造函数和析构函数,不要产生内存泄漏。 需实现的基本功能(类IntQueue的成员函数):1. bool EnQueue (int ); 将一个整型数据放进队列,需要根据队列大小情况向用户给出提示2. int DeQueue (); 返回位于队列第一个位置的数据,并将该数据移出队列3. int Peek () const; 返回位于队列第一个位置的数据,但不... 阅读全文

posted @ 2013-04-14 23:22 飞鼠溪 阅读(131) 评论(0) 推荐(0)