随笔分类 -  c和c++

摘要:::作用域运算符, 左部表示右部符号的作用域, 左部为空时表示全局作用域.一般情况下, 全局作用域的函数和变量可以不指定作用域而直接使用. 但当代码作用域内有同名函数或变量出现时, 两者就会冲突. 由于程序默认是使用代码作用域内的符号, 如果需要指定使用全局符号, 就需要加上::表示是使用全局作用域. 比如int var1 = 0;int func() { int var1 = 3; //return var1; // return 3; return ::var1; // return 0;}代码中的::max也是同样的含义. 阅读全文
posted @ 2013-07-16 09:40 幻星宇 阅读(423) 评论(0) 推荐(0) 编辑
摘要:虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈。下面是对C++的虚函数这玩意儿的理解。一, 什么是虚函数(如果不知道虚函数为何物,但有急切的想知道,那你就应该从这里开始)简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。下面来看一段简单的代码class A{public:void print(){ coutprint();p2->print();}运行一下看看 阅读全文
posted @ 2013-06-26 15:05 幻星宇 阅读(234) 评论(0) 推荐(0) 编辑
摘要:C++类的const成员函数doubleSales_item::avg_price()const{}const关键字表明这是一个const成员函数,它不可以修改Sales_item类的成员变量。如果没有为一个类显示的定义任何的构造函数,编译器会自动为这个类生成默认的构造函数,成为“合成的默认构造函数”。这样的话,构造函数不会自动初始化内置类型的成员。对于类类型的成员,比如string,会用string自身的默认构造函数进行初始化。复制形参函数调用的时候并不考虑形参是否非const——函数操纵的只是副本。函数无法改变实参。结果是,既可以将const对象传递给cosnt形参,也可以传递给非cons 阅读全文
posted @ 2013-06-20 16:41 幻星宇 阅读(438) 评论(0) 推荐(0) 编辑
摘要:operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。一、为什么使用操作符重载?对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,对于用户自己定义的class,如果想支持基本操作,比如比较大小,判断是否相等,等等,则需要用户自己来定义关于这个操作符的具体实现。比如,判断两个人是否一样大,我们默认的规则是按照其年龄来比较,所 阅读全文
posted @ 2013-06-19 15:38 幻星宇 阅读(437) 评论(0) 推荐(0) 编辑
摘要:一、C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗?能!struct能继承吗?能!!struct能实现多态吗?能!!!最本质的一个区别就是默认的访问控制,体现在两个方面:1)默认的继承访问权限。struct是public的,class是private的。写如下的代码:struct A{char a;};struct B : A{char b;};这个时候B是public继承A的。如果都将上面的struct改成class,那么B是private继承A的。这就是默认的继承访问权限。所以我们在 阅读全文
posted @ 2013-06-19 14:26 幻星宇 阅读(250) 评论(0) 推荐(0) 编辑
摘要:主要是用到二进制的异或运算。如:加密方法:设置一密码,如code=123,将字符量ch与密码code做异或运算(ch∧code),则产生ch的加密码;而将加密码ch与密码code做异或运算将还原为解码。如:ch=’A’,ch∧code等价于:01000001∧01111011,异或结果为加密码:00... 阅读全文
posted @ 2013-06-12 13:51 幻星宇 阅读(210) 评论(0) 推荐(0) 编辑
摘要:一、“按位与”运算符(&) 1、运算规则 参加运算的两个数据,按二进位进行“与”运算,如果两个相应的二进位都为1,则该位的结果值为1,否则为0,即: 0&0=0,0&1=0,1&0=0,1&1=1. 2、用途 (1)清零 运算对象:原来的数中为1的位,新数中相应位为0。 (2)取一个数中某些指定位。... 阅读全文
posted @ 2013-06-12 13:38 幻星宇 阅读(550) 评论(0) 推荐(0) 编辑
摘要:十进制与二进制转换之相互算法十进制转二进制:用2辗转相除至结果为1将余数和最后的1从下向上倒序写 就是结果例如302302/2 = 151 余0151/2 = 75 余175/2 = 37 余137/2 = 18 余118/2 = 9 余09/2 = 4 余14/2 = 2 余02/2 = 1 余0故二进制为100101110二进制转十进制从最后一位开始算,依次列为第0、1、2...位第n位的数(0或1)乘以2的n次方得到的结果相加就是答案例如:01101011.转十进制:第0位:1乘2的0次方=11乘2的1次方=20乘2的2次方=01乘2的3次方=80乘2的4次方=01乘2的5次方=321乘 阅读全文
posted @ 2013-06-12 13:09 幻星宇 阅读(958) 评论(0) 推荐(0) 编辑
摘要:一、关于一般常量声明或定义的格式如下:const <类型说明符> <变量名> = <常量或常量表达式>; [1]<类型说明符> const <变量名> = <常量或常量表达式>; [2][1]和[2]的定义是完全等价的。例如:整形int(或其他内置类型:float,double,char)const int bufSize = 512;或者int const bufSize = 512;因为常量在定义后就不能被修改,所以定义时必须初始化。bufSize = 128; // error:attempt to write to 阅读全文
posted @ 2013-06-07 17:17 幻星宇 阅读(314) 评论(0) 推荐(1) 编辑
摘要:目录一、什么是sizeof二、sizeof用法三、基本数据类型的sizeof四、复杂数据类型的sizeof及其数据对齐问题五、class类型的sizeof特别探讨六、总结一、什么是sizeof 首先看一下sizeof在msdn上的定义: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t. 看到return这个字眼 阅读全文
posted @ 2013-06-05 10:01 幻星宇 阅读(257) 评论(0) 推荐(0) 编辑
摘要:位运算是对表示数据的基本单元进行"加和","减除"的方法.首先一个位(bit)单位就是0或1,硬件表示就是一个肪冲的开和,这是硬软通迅最基本的单元.我们所说的一个字节(byte)需要8个位来表示,一个字(WORD)要两个字节,16个位表示.一个双字(DWORD)要两个字,四个字节,32个位来表示.0 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 0 1 1 1 1 0 0 0|- bit 31... bit 0 - ||- BYTE 3-| |- BYTE 2 -||- BYTE 1 -| |-BYTE0 - 阅读全文
posted @ 2013-06-04 16:42 幻星宇 阅读(438) 评论(0) 推荐(0) 编辑
摘要:二维数组和指针⑴ 用指针表示二维数组元素。要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整体,即视为一个大的数组元素时,这个存储的二维数组也就变成了一个一维数组了。而每个大数组元素对应二维数组的一行,我们就称之为行数组元素,显然每个行数组元素都是一个一维数组下面我们讨论指针和二维数组元素的对应关系,清楚了二者之间的关系,就能用指针处理二维数组了。设p是指向数组a的指针变量,若有:p=a[0];则p+j将指向a[0]数组中的元素a[0][j]。由于a[0]、a[1]┅a[M-1]等各个行 阅读全文
posted @ 2013-06-03 17:01 幻星宇 阅读(561) 评论(0) 推荐(0) 编辑
摘要:今天看到了c++的指针,按照上面敲了一个简单的例子,如下:int inval = 1024; int *pi = &inval; //int *ppi = pi; //ppi与pi都指向inval的地址,即指向同一地址 int **ppi = &pi; //ppi指针指向pi指针 cout << "The value of inval\n"; cout << "direct value: " << inval << "\n"; cout << "in 阅读全文
posted @ 2013-06-03 15:27 幻星宇 阅读(182) 评论(0) 推荐(0) 编辑
摘要:C++内置的数组支持容器的机制,但是它不支持容器抽象的语义。要解决此问题我们自己实现这样的类。在标准C++中,用容器向量(vector)实现。容器向量也是一个类模板。标准库vector类型使用需要的头文件:#include <vector>。vector 是一个类模板。不是一种数据类型,vector<int>是一种数据类型。Vector的存储空间是连续的,list不是连续存储的。一、 定义和初始化vector< typeName > v1; //默认v1为空,故下面的赋值是错误的v1[0]=5;vector<typeName>v2(v1); 或v 阅读全文
posted @ 2013-05-30 15:42 幻星宇 阅读(243) 评论(0) 推荐(0) 编辑
摘要:// pointer_func.cpp : Defines the entry point for the console application.//#include "stdafx.h"void ptrswap(int *&v1, int *&v2){ int *tmp = v2; v2 = v1; v1 = tmp;}int main(int argc, char* argv[]){ int i = 10; int j = 20; int *pi = &i; int *pj = &j; cout << "Befor 阅读全文
posted @ 2012-03-27 15:08 幻星宇 阅读(233) 评论(0) 推荐(0) 编辑
摘要:#include "stdafx.h"int main(int argc, char* argv[]){ //string s("hello world"); string s = "hello world"; string *p = &s; *p = "goodbye";//此时字符串s的值也变化了 string *sp = &s; sp = p; *sp = "new another world";//都指向了同一内存地址 cout << s << e 阅读全文
posted @ 2012-03-27 13:56 幻星宇 阅读(138) 评论(0) 推荐(0) 编辑
摘要:// vector.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <vector>int main(int argc, char* argv[]){ /*string word; vector<string> text; int i = 0; while( cin>>word ){ text.push_back(word); cout << text[i] << endl; i++; } 阅读全文
posted @ 2012-03-27 11:44 幻星宇 阅读(198) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示