10 2013 档案

摘要:Vector List构造函数可以初始化顺序容器的大小(size t) , t 可以指定顺序容器的capacity。第二个参数可以指定容器的默认值。reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_back()/insert()函数。resize是改变容器的大小,且在创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。此时再调用push_back()函数,是加在这个新的空间后面的。两个函数的参数形式也有区别的,res 阅读全文
posted @ 2013-10-31 10:27 AlexChowG 阅读(235) 评论(0) 推荐(0) 编辑
摘要:C++编程语言中有一种叫做new的二维数组,它的应用方式比较灵活,可以有多种方法来帮助我们实现一些特定功能。在这里我们将会总结几种C++二维数组new的应用方式,来进行逐一的点评。C++二维数组new应用方式一:A (*ga)[n] = new A[m][n]; ... delete []ga; 缺点:n必须是已知优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)C++二维数组new应用方式二:A** ga = new A*[m]; for(int i = 0; i ga; ga.resize(m); //这三行可用可不用 for(int i = 1; i < n; i+ 阅读全文
posted @ 2013-10-31 10:26 AlexChowG 阅读(199) 评论(0) 推荐(0) 编辑
摘要:makefile 及gcc参数makefile可以定义变量在makefile前几行变量名=变量值makefile 命令一定是以tab开头的,否则会出现missing separator错误makefile可以自动生成一系列某种类型的文件,用法 %.后缀名 : %.传入文件后缀名执行方法如,生成.obj文件,文件名用 $*.xxx 代替%.obj : %.cgcc -Ixxx-o [输出路径变量]$*.obj[输入路径变量]$*.c [输入路径变量]为makefile定义的变量,使用 $(变量名),可选具体例子:%.obj : %.asm Makefile$(NASK) $*.asm $(RE. 阅读全文
posted @ 2013-10-16 14:44 AlexChowG 阅读(811) 评论(0) 推荐(0) 编辑
摘要:解决方法:1。 改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"mysql -u root -pvmwaremysql>use mysql;mysql>update user set host = '%' where user = 'root';mysql>se 阅读全文
posted @ 2013-10-16 14:41 AlexChowG 阅读(4028) 评论(0) 推荐(0) 编辑
摘要:如何解决中文乱码问题呢,改变Mysql系统的编码方式,在MySql目录下的my.ini文件中的default-character-set=latin1改为default-character-set=gbk(或其他),再重启服务。但仍然显示为乱码,原来是数据库的编码方式仍是latin1,我直接删除数据库,重新建了一个。后来发现在Mysql/data文件夹下在数据库名对应文件夹下多了个db.opt文件,内容为default-character-set=gbkdefault-collation=gbk_chinese_ci 阅读全文
posted @ 2013-10-16 14:40 AlexChowG 阅读(213) 评论(0) 推荐(0) 编辑
摘要:2.CR0中保护控制位(1)PE:CR0的位0是启用保护(Protection Enable)标志。当设置该位时即开启了保护模式;当复位时即进入实地址模式。这个标志仅开启段级保护,而并没有启用分页机制。若要启用分页机制,那么PE和PG标志都要置位。(2)PG:CR0的位31是分页(Paging)标志。当设置该位时即开启了分页机制;当复位时则禁止分页机制,此时所有线性地址等同于物理地址。在开启这个标志之前必须已经或者同时开启PE标志。即若要启用分页机制,那么PE和PG标志都要置位。(3)WP:对于Intel 80486或以上的CPU,CR0的位16是写保护(Write Proctect)标志。当 阅读全文
posted @ 2013-10-16 14:40 AlexChowG 阅读(3204) 评论(0) 推荐(1) 编辑
摘要:我们都知道,在MySQL中,要实现主键的自动递增非常简单.只需要在主键定义的后面加上auto_increment即可,但是在Oracle中就不是这样,需要分几步来完成1.建立一个表,这个就不多说了,如果这个都不会,,相信我,回头是岸啊~create table 户口本 ( 户号 INTEGER not null, 户别 CHAR(20) not null, 户主姓名 CHAR(20) not null, 住址 CHAR(200) not... 阅读全文
posted @ 2013-10-16 14:39 AlexChowG 阅读(184) 评论(0) 推荐(0) 编辑
摘要:[寄存器操作]set $reg = val 设置寄存器的值。现在版本可以设置的寄存器包括:eax ecx edx ebx esp ebp esi edi暂时不能设置:eflags cs ss ds es fs gsr|reg|registers reg = val 同上。dump_cpu 显示完整的CPU信息。set_cpu 设置CPU状态,这里可以设置dump_cpu所能显示出来的所有CPU状态。[反汇编命令]u|disas|disassemble [/num] [start] [end]反汇编物理地址start到end 之间的代码,如果不指定参数则反汇编当前EIP指向的代码。num是可选参 阅读全文
posted @ 2013-10-16 14:39 AlexChowG 阅读(212) 评论(0) 推荐(0) 编辑
摘要:mysql 中文安装数据库的时候选择utf-8或者是gbk就行。或者:mysql安装目录下的my.ini文件以下部分: [mysql] //改成你要的编码,比如gbk之类 default-character-set=utf8 [mysqld] # The TCP/IP Port the MySQL Server will listen on port=3306 //改成你要的编码,比如gbk之类 注意要和上面修改的一样 default-character-set=utf8 阅读全文
posted @ 2013-10-16 14:37 AlexChowG 阅读(205) 评论(0) 推荐(0) 编辑
摘要:数据库开发时,sql语句要过滤或者用半角代替某些符号防止sql注入select * from users where username=request["username"] and password=request["password"]当request["username"] = 'q' or 0=0 --这样就可以得到用户表--为注释 or 0=0永远是真也可以用封装好的类来执行sql 阅读全文
posted @ 2013-10-16 14:36 AlexChowG 阅读(181) 评论(0) 推荐(0) 编辑
摘要:取消插入触发器create trigger mytrg before insert on mytablefor each rowbegin if ... then raise_application_error(-20099,'can not insert for reason of ....'); end if;end; 阅读全文
posted @ 2013-10-16 14:34 AlexChowG 阅读(188) 评论(0) 推荐(0) 编辑
摘要:创建数据表的语法形式CREATE TABLE ( 列名1 数据类型 [列级别约束条件] [默认值] 列名2 数据类型 [列级别约束条件] [默认值] ... [表级别约束条件]);主键约束单字段主键字段名 数据类型 PRIMARY KEY多字段联合主键PRIMARY KEY [字段1,字段2....]not null 非空约束unique唯一性约束默认约束字段名 数据类型 default 默认值表属性值自动增加字段名 数据类型 auto_increment外键约束[constraint ] FOREIGN KEY 字段名1[,字段名2,...] references 主键列1[,主键列2... 阅读全文
posted @ 2013-10-16 14:30 AlexChowG 阅读(211) 评论(0) 推荐(0) 编辑
摘要:mysql数据库插入year时输入4位字符串或数字按照输入插入输入2位字符串‘00’-‘69’代表2000-2069输入2位字符串‘70’-‘99’代表1970-1999输入2位数字1-69 : 2001-206970-99: 1970-19990 : 0000 阅读全文
posted @ 2013-10-16 14:26 AlexChowG 阅读(492) 评论(0) 推荐(0) 编辑
摘要:【例7.46】在fruits表和suppliers表之间使用内连接查询,查询之前,查看两个表的结构,SELECT suppliers.s_id, s_name,f_name, f_priceFROM fruits ,suppliersWHERE fruits.s_id = suppliers.s_id;【例7.47】在fruits表和suppliers表之间使用INNER JOIN语法进行内连接查询SELECT suppliers.s_id, s_name,f_name, f_priceFROM fruits INNER JOIN suppliersON fruits.s_id = suppl 阅读全文
posted @ 2013-10-16 14:23 AlexChowG 阅读(584) 评论(0) 推荐(0) 编辑
摘要:mysql索引CREATE TABLE table_name [col_name data type][unique | fulltext | spatial] [index | key][index_name](col_name[length]) [ASC|DESC][unique | fulltext | spatial] [index | key] :索引类型使用EXPLAIN语句查看索引是否正在使用:explain select * from book where year_publication=1990 \G;index(col1,col2...)组合索引查询时需要第一个索引列开始 阅读全文
posted @ 2013-10-16 14:22 AlexChowG 阅读(220) 评论(0) 推荐(0) 编辑
摘要:mysql 比较运算符返回结果只有1,0,null= 可以比较字符串和数字 自动转换 不能比较null 安全运算符 可以比较null 或者 != 不等于运算符 不可以比较null= > >右移<<左移&^位取反 阅读全文
posted @ 2013-10-16 14:22 AlexChowG 阅读(923) 评论(0) 推荐(0) 编辑
摘要:获取随机数rand(),rand(x)四舍五入round(x),round(x,y)y保留小数点y位,为负数时向左y位truncate(x,y)直接截取符号函数sign(x) x正为1,负数为-1 0为0pow(x,y) x的y次方exp(x) e的x次方log(x) e对x的对数log10(x) 10对x的对数radians(x) 角度转弧度degrees(x) 弧度转角度sin(x)asin(x)...char_length(string) 字符串长度 中文一个字符为3位length(string)concat(string1,string2) 连接字符串insert(s1,x,len,s 阅读全文
posted @ 2013-10-16 14:21 AlexChowG 阅读(475) 评论(0) 推荐(0) 编辑
摘要:between xxx and xxx 指定范围查询not不符合的返回like 通配符% : 任意长度字符串包括零字符_ : 一个字符select distinct field_key from tablefield_key唯一一个记录,消除重复值group by分组 结合 max() min() count()函数使用having expr 限定特定的分组with rolluplimit x,y x起始行,可省略代表0 y行数count(字段名) 计算字段记录条数 ,如果字段有空的则不计算sum()计算字段记录总和max()返回查询列的最大值min()返回查询列的最小值 阅读全文
posted @ 2013-10-16 14:20 AlexChowG 阅读(379) 评论(0) 推荐(0) 编辑
摘要:mysql insert语句后如何获取insert数据的主键值自动编号方法很简单的,mysql数据自带的了mysql_insert_id ( );函数使用方法:insert into(a')values('b')$nid =last_insert_id();方法二:LAST_INSERT_ID(),不过关于这个函数,与mysql_insert_id()比较有很多的区别,mysql_insert_id ()是直接获取当前session的insert_id,而LAST_INSERT_ID()是SQL函数,需要通过执行SQL来获得,如:SELECT LAST_INSERT_I 阅读全文
posted @ 2013-10-16 14:18 AlexChowG 阅读(1316) 评论(0) 推荐(0) 编辑
摘要:mysql连接数据库:mysql -h hostaddress -u username -penterpassword:xxx退出控制台:quit->等待下一条语句或者结束符\c取消输入'>等待'">等待"mysql sql语句以; 结束create database xxx; //创建数据库xxxuse xxx //进入xxx数据库show tables;列出数据库的所有表create table xxx (字段1 字段描述,字段2 字段描述,字段3 字段描述,.....)describe xxx //描述数据库字段show create 阅读全文
posted @ 2013-10-16 14:17 AlexChowG 阅读(132) 评论(0) 推荐(0) 编辑
摘要:MySQL 触发器简单实例~~语法~~CREATE TRIGGER --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.{ BEFORE | AFTER } --触发器有执行的时间设置:可以设置为事件发生前或后。{ INSERT | UPDATE | DELETE } --同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。ON --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。FOR EACH ROW --触.. 阅读全文
posted @ 2013-10-16 14:15 AlexChowG 阅读(256) 评论(0) 推荐(0) 编辑
摘要:linux 安装mysqlyum install mysqlyum install mysql-server 阅读全文
posted @ 2013-10-16 13:44 AlexChowG 阅读(119) 评论(0) 推荐(0) 编辑
摘要:virtualbox linux的增强功能必须安装,分配个光驱,选择增强功能后会自动添加VBoxGuestAdditons.iso,或者自己挂载,mount-t iso9660 /dev/cdrom1 /cdrom,之后就是进入光盘挂载点了,直接安装就行了。增强工具安装完成后就可以在virtualbox里添加数据空间了,在windows下找个你的共享目录,virtualbox linux下建立个挂载点:1.关掉虚拟机,打开虚拟机的设置,在数据空间里选择你要共享的文件夹,并且重命名2.打开虚拟机,重新安装增强功能3.打开终端,登入root,4.mkdir /mnt/share5.mount -t 阅读全文
posted @ 2013-10-16 13:43 AlexChowG 阅读(379) 评论(0) 推荐(0) 编辑
摘要:以下的文章主要是向大家描述的是MySQL数据库返回影响行数的实际操作流程,我们主要是以介绍MySQL数据库返回影响行数的时机应用代码来引出其具体的操作步骤,下面就是文章的主要内容描述。found_rows():select row_count():updatedeleteinsert注:需要配合相应的操作一起使用,否则返回的值只是1和-1(都是不正确的值)示例:dropdatabaseifexists`mytest`;createdatabase`mytest`;use`mytest`;droptableifexists`MyTestTable`;createtable`MyTestTable 阅读全文
posted @ 2013-10-16 13:42 AlexChowG 阅读(1783) 评论(0) 推荐(0) 编辑
摘要:nslookup 可以用来查询域名服务器上DNS绑定记录如,查询txt记录nslookup -qt=txt 42498.com类型(qt)主要有:A 地址记录(Ipv4)AAAA 地址记录(Ipv6)AFSDBAndrew文件系统数据库服务器记录ATMA ATM地址记录CNAME 别名记录HINFO硬件配置记录,包括CPU、操作系统信息ISDN域名对应的ISDN号码MB 存放指定邮箱的服务器MG 邮件组记录MINFO 邮件组和邮箱的信息记录MR 改名的邮箱记录MX邮件服务器记录NS 名字服务器记录PTR 反向记录RP 负责人记录RT 路由穿透记录SRV TCP服务器信息记录TXT域名对应的文本 阅读全文
posted @ 2013-10-16 13:41 AlexChowG 阅读(187) 评论(0) 推荐(0) 编辑
摘要:MySQL模式:Strict Mode刚刚在配置阿里云主机的环境:IIS7.5+PHP5.3+MySQL5.5安装Mysql过程中遇到StrictMode的选项,特意料了解了一下,大致如下:一.StrictMode的描述:根据mysql5.0以上版本strictmode(STRICT_TRANS_TABLES)的限制:1).不支持对notnull字段插入null值2).不支持对自增长字段插入''值,可插入null值3).不支持text字段有默认值eg:1.看下面代码:(第一个字段为自增字段)$query="insertintodemovalues('' 阅读全文
posted @ 2013-10-16 13:41 AlexChowG 阅读(320) 评论(0) 推荐(0) 编辑
摘要:修改MySql Server安装目录下的 my.ini 文件,在mysqld节下加入下面一行 lower_case_table_names=2 (0:大小写敏感;2:大小写不敏感)数据库名大小写如果区分会导致存储过程访问出错 阅读全文
posted @ 2013-10-16 13:40 AlexChowG 阅读(119) 评论(0) 推荐(0) 编辑
摘要:Linux防火墙基本知识来源: ChinaUnix博客 日期: 2008.10.30 23:59 (共有条评论) 我要评论一、防火墙的分类(一)、包过滤防火墙。数据包过滤(packet Filtering)技术是在网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,称为访问控制表(access control lable,ACL)。通过检查数据流中每个数据包的源地址和目的地址,所用的端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过。包过滤防火墙的优点是它对用户来说是透明的,处理速度快且易于维护。缺点是:非法访问一旦突破防火墙,即可对主机上的软件和配置漏洞进行攻击;数据包的. 阅读全文
posted @ 2013-10-16 13:38 AlexChowG 阅读(198) 评论(0) 推荐(0) 编辑
摘要:如何查询域名的MX、A、DNS、txt、cname记录在电脑中点“开始”_“运行”_输入“CMD”_回车 下面的将在出现的黑色框内在输入: 1、查询域名的A记录 nslookup (空格) -qt=A (空格) 域名 例:查询命令nslookup -qt=a www.163ns.com 查询的结果:61.155.150.232就是A记在电脑中点“开始”_“运行”_输入“CMD”_回车下面的将在出现的黑色框内在输入:1、查询域名的A记录nslookup (空格) -qt=A (空格) 域名例:查询命令nslookup -qt=a www.163ns.com查询的结果:61.155.150.232 阅读全文
posted @ 2013-10-16 13:34 AlexChowG 阅读(3041) 评论(0) 推荐(0) 编辑
摘要:关于IP反向解析(PTR/RDNS) 2013-02-27 17:34:00| 分类: 技术杂项 | 标签:ip反向解析 ip反解 |字号 订阅域名反向解析(RDNS)是一种常见反垃圾邮件的功能,现在要需要检查IP反向解析(PTR)记录的邮件服务器越来越多,尤其是国外的邮件服务器(例如:AOL),很多时候被对方拒绝被退信,都是因为没有反向解析造成的。 国内的 sina 邮件系统有这个要求,如果没有反向解析的ip发信到 sina.com, 可能会返还以下的错误代码:错误代码:450 4.7.1 Client host rejected: cannot find your hostname [I. 阅读全文
posted @ 2013-10-16 13:33 AlexChowG 阅读(2551) 评论(0) 推荐(0) 编辑
摘要:Visual Studio 内存泄漏检测方法非MFC程序可以用以下方法检测内存泄露:1.程序开始包含如下定义:#ifdef _DEBUG#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)#else#define DEBUG_CLIENTBLOCK#endif // _DEBUG#define _CRTDBG_MAP_ALLOC#include #include #ifdef _DEBUG#define new DEBUG_CLIENTBLOCK#endif // _DEBUG2.程序中添加下面的函数:_CrtSet 阅读全文
posted @ 2013-10-16 13:28 AlexChowG 阅读(1077) 评论(0) 推荐(0) 编辑
摘要:strcpy慎用因为如果源字符串和目的字符串分配在连续的空间,而且空间大小仅仅是足够容纳最初的字符串,那么strcpy在复制是只考虑源字符串的\0,不会考虑空间大小,那么就很容易使得访问目的地址越界,而且如果目的字符串存放的空间在源字符串的前面,而且比源字符串短,那么,复制将会导致源字符串前面的字符丢失123\0123456789\0目的 源字符串拷贝后123\0123456789\0目的 源字符串123456789\0789\0目的 源所以调用strcpy的字符串目的地和源都必须有足够的预留空间 阅读全文
posted @ 2013-10-16 13:27 AlexChowG 阅读(233) 评论(0) 推荐(0) 编辑
摘要:main函数执行前后执行其他语句main 运行前static 类型的对象会在main函数之前初始化,所以在某个类的构造方法执行的代码是在main函数前执行,可以通过这种方式实现在main函数之前执行代码main跳出后main()函数执行完毕后会倒着顺序执行atexit函数,一个程序最多可以注册32个atexit函数先注册后执行void exe07_part1(){ cout<<"part1"<<endl;}void exe07_part2(){ cout<<"part2"<<endl;}void exe07 阅读全文
posted @ 2013-10-16 13:03 AlexChowG 阅读(221) 评论(0) 推荐(0) 编辑
摘要:套接字操作系统管理的进程的套接字表,每一个进程拥有一张套接字表套接字有两种一种是被动套接字(作为Server时),一种是活动套接字(作为Client时)。TCP/IP 协议族 常量 PF_INET =2TCP/IP 地址族 常量 AF_INET =2套接字端点地址一般数据结构struct sockaddr{ //一般结构定义 u_short sa_family; //地址族 char sa_data[14]; //地址};套接字端点地址的精确数据结构定义struct sockaddr_in{ u_short sin_family; //地址类型,值一直都是AF_INET u_short... 阅读全文
posted @ 2013-10-16 12:54 AlexChowG 阅读(446) 评论(0) 推荐(0) 编辑
摘要:C++ 11 多线程相关库thread类thread构造方法,支持lambda语句thread(函数名, 函数参数...)成员函数:detach()//不阻塞运行开始线程join()//阻塞主线程,运行线程互斥的实现使用了Mutex 类 阅读全文
posted @ 2013-10-16 12:50 AlexChowG 阅读(161) 评论(0) 推荐(0) 编辑
摘要:ntohs =net to host short int 16位htons=host to net short int 16位ntohs =net to host long int 32位htonl=host to net long int 32位简述: 将一个无符号短整形数从网络字节顺序转换为主机字节顺序。 #include u_short PASCAL FAR ntohs( u_short netshort); netshort:一个以网络字节顺序表达的16位数。注释: 本函数将一个16位数由网络字节顺序转换为主机字节顺序。返回值: ntohs()返回... 阅读全文
posted @ 2013-10-16 12:49 AlexChowG 阅读(685) 评论(0) 推荐(0) 编辑
摘要:C++多线程需要的库文件windows 下process.h函数:_begingthread(void*(void*) pfunc,unsigned stack, void* funcParam);pfunc为只有一个void类型的指针参数(可以通过强制转换为void*类型)的void返回类型函数指针stack栈大小,一般为0funcParam为pfunc的参数指针,需要强制转换为void*类型使用:int sum(struct param){ return param.a+param.b;}struct param p;_beginthread((void(*)(void*)sum,0,(. 阅读全文
posted @ 2013-10-16 12:48 AlexChowG 阅读(462) 评论(0) 推荐(0) 编辑
摘要:stl提供了三个最基本的容器:vector,list,deque。vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。list就是数据结构中的双向链表(根据sgi stl源代码),因此它的内存空间可以是不连续的,通过指针来进行数据的访问,这个特点使得它的随即存取变的非常没有效率,因此它没有提供[]操作符的重载。但由于链表的特点,它可以 阅读全文
posted @ 2013-10-16 12:47 AlexChowG 阅读(157) 评论(0) 推荐(0) 编辑
摘要:在c如果需要编译winsock 程序链接出错xx@的错误在链接参数加入-lwsock32 或者 在头文件第一句加入#pragma comment(lib,"ws2_32.lib")多线程程序 加入 -lpthreadGC2 阅读全文
posted @ 2013-10-16 12:47 AlexChowG 阅读(166) 评论(0) 推荐(0) 编辑
摘要:RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。RTTI提供了以下两个非常有用的操作符:(1)typeid操作符,返回指针和引用所指的实际类型。(2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用。typeid操纵符会返回一个type_info类,这个类有一个成员函数是name()得到类型名,type_info类构造方法私有,只能由typeid产生,type_info重载了== 和!= ,隐藏了赋值运算符=,所以可以用来比较两个变量的类型是否 阅读全文
posted @ 2013-10-16 12:45 AlexChowG 阅读(303) 评论(0) 推荐(0) 编辑
摘要://HeapOnly.cpp #include using namespace std;只能在堆上分配空间:我们可将类的析构函数用private来修饰,也就是把析构函数私有化,因为自动变量与静态变量的对象都在释放空间的时候都需要访问析构函数。若析构函数私有,外面就不能调用,这时候会产生编译错误,这样就达到了只能在堆上分配空间了。但是,把析构函数私有化,那么我们就不能调用delete了, 因为它也需要访问析构函数。这就要求我们自己去提供回收内存空间的函数,以防内存泄漏。 class HeapOnly { public: HeapOnly() { cout destroy(); // HeapO. 阅读全文
posted @ 2013-10-16 12:44 AlexChowG 阅读(1266) 评论(0) 推荐(0) 编辑
摘要:C 里面static 声明的变量只对本源文件可见变量存储在静态存储区,初始化为0只初始化一次,比如在函数体里面声明的值编译出的程序执行时不会重复声明 阅读全文
posted @ 2013-10-16 12:42 AlexChowG 阅读(127) 评论(0) 推荐(0) 编辑
摘要:虚拟继承虚继承会在派生类加多一个指向基类的指针(除非基类没有数据成员,这样就没有必要用一个指针去指向基类了),如果基类和派生类都有虚函数,同用,如果基类A,B有两个,而且两个基类还有base基类,那么虚继承后也有一个指针指向base(base要有数据才行)总结:无论继承了多少类,一个类只有最多一个虚函数表指针;无论继承多么乱,某一个基类最多只有一个指针指向(特殊是基类没有数据成员,就没必要为其分配一个指针) 阅读全文
posted @ 2013-10-16 12:41 AlexChowG 阅读(157) 评论(0) 推荐(0) 编辑
摘要:虚函数和纯虚函数有以下所示方面的区别。(1)类里如果声明了虚函数,这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被覆盖,这样的话,这样编译器就可以使用后期绑定来达到多态了。纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。(2)虚函数在子类里面也可以不重载的;但纯虚函数必须在子类去实现,这就像Java的接口一样。通常把很多函数加上virtual,是一个好的习惯,虽然牺牲了一些性能,但是增加了面向对象的多态性,因为很难预料到父类里面的这个函数不在子类里面不去修改它的实现。(3)虚函数的类用于“实作继承”,继承接口的同时也继承了父类的实现。当然大家也可 阅读全文
posted @ 2013-10-16 12:37 AlexChowG 阅读(254) 评论(0) 推荐(0) 编辑
摘要:标准C++中有没有接口和纯抽象类的概念?下面是C++的创造者的回答,供你参考Bjarne Stroustrup:我在对人们解释这个问题的过程中遇到了很多问题,而且我也一直不能理解为什么让人们理解这个问题是如此困难。自C++出现那天起,就存在着包含数据成员的类和不包含数据成员的类。在过去,人们强调利用一个最基础的设施以及该设施内部的东西来构造软件系统,而那个“最基本的设施”通常就是抽象基类。从80年代中叶到80年代末,那些仅由虚拟函数组合而成的类通常都被称为ABCs(Abstract Base Classes 抽象基类)。1987年,我在C++中加入了纯虚函数的概念,一个纯虚函数必须被其派生类重 阅读全文
posted @ 2013-10-16 12:36 AlexChowG 阅读(1710) 评论(0) 推荐(0) 编辑
摘要:C++构造函数调用自身的另一个构造函数在Java中,可以通过this(参数)或者类名(参数) 调用自身的另一个构造方法,但在C++中,直接调用 类名(参数)是不行的,因为这样C++会从新分配内存,并且在当前构造方法结束时会调用析构函数,导致对象构造不成功,导致不能像Java那样初始化对象。C++正确调用方法是new(this)构造方法(参数)析构函数析构函数是在包含其对象的右括号结束地方被调用int main(){ { A a;}//a.~A();将在此处被调用} 阅读全文
posted @ 2013-10-16 12:36 AlexChowG 阅读(145) 评论(0) 推荐(0) 编辑
摘要:一 抽象类和接口抽象类:抽象类是特殊的类,只是不能被实例化(将定义了纯虚函数的类称为抽象类);除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的,但同时也能包括普通的方法。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。虽然不能定义抽象类的实例,但是可以定义它的指针,这正是用抽象类实现接口的重点所在。接口:接口是一个概念。它在C++中用抽象类来实现,在C#和Java中用interface来实现。接口是引用类型的,类似于类,和抽象类的相似之处有三 阅读全文
posted @ 2013-10-16 12:35 AlexChowG 阅读(210) 评论(0) 推荐(1) 编辑
摘要:枚举类型我们在写程序的时候常常需要定义一组与对象相关的属性例如一个文件可能会以三种状态输入输出和追加之一被打开典型情况下我们通过把每个属性和一个唯一的const 值相关联来记录这些状态值因此我们可能会这样写const int input = 1;const int output = 2;const int append = 3;并按如下方式使用这些常量bool open_file( string file_name, int open_mode);// ...open_file( "Phoenix_and_the_Crane", append );尽管这样做也能奏效但是它有 阅读全文
posted @ 2013-10-16 12:34 AlexChowG 阅读(149) 评论(0) 推荐(0) 编辑
摘要:C++数组1、被显式初始化的数组不需要指定维数值编译器会根据列出来的元素的个数来确定数组的维数// 维数为3 的数组int ia[] = { 0, 1, 2 };2、指定维数的数字如果显式初始化数字,初始化队列不能超过维数大小,如果小于维数大小,用0填充3、字符数组 ,用{}和""方式初始化的数字长度不一样,""初始化的数组维数多一,用来存放04、一个数组不能被另外一个数组初始化也不能被赋值给另外一个数组而且C++不允许声明一个引用数组(即由引用组成的数组),要把一个数组拷贝到另一个中去必须按顺序拷贝每个元素// ok: 类型为int*的指针的数组int 阅读全文
posted @ 2013-10-16 12:31 AlexChowG 阅读(241) 评论(0) 推荐(0) 编辑
摘要:通过类句柄减少编译次数当一个项目的类的头文件包含了另一个类,但是如果修改了另一个类,那么所以包含这个类的所有类都要重新编译,这样导致项目编译次数增多,浪费资源。通过类句柄可以解决这个问题。例子://handle.hclass handle{class cheshire; //这就是类句柄,声明了handle类有一个cheshire的类,但没有定义cheshire *c; //使用cheshire类声明一个变量public:void init();void read();}//另外一个文件:handle.cppclass handle::cheshire{//数据成员//函数成员}void ha 阅读全文
posted @ 2013-10-16 12:26 AlexChowG 阅读(138) 评论(0) 推荐(0) 编辑
摘要:1 C的声明与定义声明是告诉编译器存在某一个函数或者变量定义是编译器为某一名称的函数或变量分配存储地址定义可以包括声明声明常常使用extern关键字,不带函数体的函数自动作为声明,可以理解为自动加上extern关键字。C++函数原型: 返回类型 函数名(,...);C++中函数声明至少是一个函数原型,函数定义时必须给出各个参数名C 和C++ 都允许对函数重复声明2 C++中,struct里面可以声明,定义函数,所声明的函数成为成员函数,成员函数的定义可以在结构体之外,定义:返回类型 结构体名称::函数名(参数表){函数体};::为C++的新定义的运算符,成为作用域限定符3 C++中如果一个结构 阅读全文
posted @ 2013-10-16 12:25 AlexChowG 阅读(188) 评论(0) 推荐(0) 编辑
摘要:重载与缺省参数C++全局函数与类成员函数在编译器编译时以类名+函数名确定内部函数名C++函数重载编译器一般以参数产生内部函数名C++不能以返回值作为重载的原因:很多情况下函数调用者调用函数并不需要返回值,如果存在一个void f(); int f(); 当调用f();时编译器不能确定究竟是调用哪个函数。C++安全连接//:def.cppvoid f(int){} //f(int)定义//:use.cppvoid f(char); //f(char)声明int main(){ f(1); return 0;}以上代码在C中可以编译成功,但在C++中不行,由于use.cpp声明了f(cha... 阅读全文
posted @ 2013-10-16 12:23 AlexChowG 阅读(283) 评论(0) 推荐(0) 编辑
摘要:隐藏的实现private,protected,public三个关键字C与C++的区别:struct 和class关键字,不再权限关键字下的成员,struct默认为公有(public),class默认为私有(private)友元定义函数或者类为当前类的友元则友元函数或类对当前类具有所有的访问权限,友元只能在某个类里面定义,因为只有类有权限的意义void global_fun();class b{public: void b_member_fun(); void b_member_fun2();};class c{ public: void c_member_fun();}class a{... 阅读全文
posted @ 2013-10-16 12:22 AlexChowG 阅读(332) 评论(0) 推荐(0) 编辑