08 2016 档案
摘要:(int)a实际上是以浮点数为参数构造了一个整型数,值为1,(int&)a告诉编译器将a当作整数看,因为1以整数形式存放与以浮点形式存放,内存数据不一样,故两者不等。1065353216(16进制为0x0000803F)表示在浮点数形式中占据的内存单元中的值,而使用int&则是告诉上下文,不管原来是
阅读全文
摘要:结果并不是0,因为在默认构造函数内部再调用带参数的构造函数是用户行为而非编译器行为,只执行函数调用,不会执行初始表达式。
阅读全文
摘要://B公有继承自A,可以是间接继承 class B:public A{} //B实现了隐式转化为A的转化操作 class B{operator A();} //A实现了non-explicit的参数为B class A{A(const B&);} //赋值操作 A& operator=(const B&);
阅读全文
摘要:这段代码有错,str指针始终为空,因为GetMemory改变的是参数的值,而非指针指向的空间里的值,而改变形参的值并不会传回。 修改方法:
阅读全文
摘要:常见的几种机器的存储方式: Linux: 小端 NT: 小端 Alpha: 小端 Sun: 大端
阅读全文
摘要:class A{ public: A(){ p = this }; ~A{ if( p != NULL){ delete p; p = NULL }; } A *p; } 由于A类中有一个指针A *p;而构造函数中有p = this;也就是说整个指针指向了对象本身。这个会导致无限构造。所以不要构造本
阅读全文
摘要://方法一 i = i + j; j = i - j; i = i - j; //方法二 i ^= j; j ^= i; i ^= j; //方法三 a = a + b - (b = a)
阅读全文
摘要:对于结构体X中表示s1占用字节的0-1,s2占用字节的2-4,s3占用字节的5-7位
阅读全文
摘要:注意:在函数返回值前加const的目的是为了使其返回值不为左值。比如假设a*b=c是合法的,但无意义,我们需要杜绝这种情况,于是我们可以将*操作符重载为返回值加const的函数。
阅读全文
摘要:/* * main.cpp * * Created on: 2016年8月29日 * Author: godsome */ #include #include #include using namespace std; int next[100]; int Index_KMP(char s[], char t[]){ ...
阅读全文
摘要:const int MINNUMBER = -32767; int find_sec_max(int data[], int count){ int maxnumber = data[0]; int sec_max = MINNUMBER; for (int i = 1; i maxnumber){ sec_max = maxnumber; ...
阅读全文
摘要:#include #include using namespace std; void Order(vector &data){ int count = data.size(); int tag = false; for(int i = 0; i data[j+1]){ tag = true; int...
阅读全文
摘要:调用_onexit(func)函数可以在main之后执行func()。
阅读全文
摘要:// __FILE__与__LINE__是系统预定义宏,由编译器定义的 cout << __FILE__; cout << __LINE__;
阅读全文
摘要:重载: ⑴同一个类中 ⑵函数名相同 ⑶参数不同 ⑷virtual关键字可有可无 覆盖: ⑴分别位于派生类与基类中 ⑵函数名字相同 ⑶参数相同 ⑷基类函数必须有virtual关键字 隐藏: ⑴如果派生类的函数与基类的函数同名,但参数不同,无论有无virtual关键字,基类的函数将被隐藏 ⑵如果派生类的
阅读全文
摘要:修改内容的差别: char a[] = "hello"; a[0] = 'x'; char *p = "world"; //指向常量字符串 p[0] = 'x'; //编译无错,运行出错 sizeof运算符能计算数组容量,而sizeof(pointer)得到的是指针变量的字节数而非pointer所指
阅读全文
摘要://bool if(!a) if(a) //int if(a == 0) //float const EXP = 0.000001; if(a -EXP) //pointer if(a != NULL) if(a == NULL)
阅读全文
摘要:通用寄存器给出的地址是段内偏移地址,相应的段寄存器地址*10H+通用寄存器内地址,便是实际访问地址。
阅读全文
摘要:当一个类A中没有任何成员变量与成员函数,这时sizeof(A)的值是多少? 答:不是0,如果是0,声明一个class A[10],而每个对象占用空间为0,这时没办法区分A[0],A[1]……。 注意:sizeof是编译时运算符,编译时就确定了,所以类似int id[sizeof(unsigned l
阅读全文
摘要:struct默认成员公有,class默认成员私有,其余功能相当。
阅读全文
摘要:从静态存储区域分配,如全局变量,static变量。 在栈上创建,如函数执行时,函数内局部变量的存储单元都可以在栈止创建,函数执行结束时释放,栈内存分配运算内置于处理器的指令集。 从堆上分配,如malloc和new,free和delete,动态内存的生存期由程序员决定。
阅读全文
摘要:两个不同类型的指针间可以使用强制转换,如reinterpret cast,C#是类型安全的。
阅读全文
摘要:当类中含有const、reference成员变量,基类的构造函数需要使用初始化表。
阅读全文
摘要:最终结果是i = 5 * 5 + 5 = 30 宏定义相当于是直接进行代码替换,如果要实现先加倍的操作应将DOUBLE(5)用括号括起来。 const与#define的区别:
阅读全文
摘要:都在堆上进行动态的内存操作,用malloc函数需要指定内存分配的字节数并且不能初始化对象,new会自动调用对象的构造函数;delete会调用对象的析构函数,而free不会。
阅读全文
摘要:重载:允许存在多个同名函数,而这些函数的参数表不同 重写:子类重新定义父类虚函数的方法 实现原理: 重载:编译器根据不同的参数表,对同名函数的名称做修饰,是静态的。 重写:当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同子类指针,动态调用属于子类的该函数,这在编译期间是无法确定的,函数地址是
阅读全文
摘要:封装:将客观事物抽象成类,每个类对自身的数据和方法通过各种权限进行管理保护 继承:实现继承(使用基类的属性与方法而无需额外编码)、可视继承(了窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现),前两种是类继承,后一种利用纯虚函数。 多态:将父对象设置成为一个或多个更多
阅读全文
摘要:关联表示两个类的一般性关系,如学生和老师的关联关系;聚合表示has-a的关系,是一种相对松散的关系,聚合类不需要对被聚合类负责,如class A{} class B{A* a;};组合表示contains-a的关系,关联性强于聚合:组合类与被组合类有相同的生命周期,组合类要对被组合类负责,如clas
阅读全文
摘要:extern是c/c++语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。 通常在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明,例如,如果模块B欲引用模块A中定义的全局变量和函数时只需包含模块A的头文件即
阅读全文
摘要:结果是266(低位低地址,高位高地址,内存占用情况0x010A) AB(0x41,对应‘A’,是低位;0x42,对应‘B’,是高位) 6261(number.i和number.half共用一块地址空间)
阅读全文
摘要:流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用
阅读全文
摘要:引用是除指针外另一个可以产生多态效果的手段,一个基类的引用可以指向它的派生类实例。 多态分为动态多态,静态多态,函数多态和宏多态等。 动态多态常指抽象类的继承;静态多态可用泛化编程实现,使用模板可行;函数多态即重载;宏多态原因在于它只是进行对应字节调换,不会辨别变量类型。
阅读全文
摘要:格式: 类型标识符 &函数名(形参列表及类型说明){//函数体} 好处: 在内存中不产生返回值的副本(返回一个局部变量的引用是不可取的,因为随着局部变量生存周期的结束,相应的引用也会失效,产生runtime error) 注意:
阅读全文
摘要:传递效果二者相同,对形参的操作实际上就是对主调函数中的实参变量或对象进行操作 引用传递不需要额外分配内存空间,直接对实参进行操作 指针传递需要分配存储单元,并使用“*指针变量名”的形式进行运算
阅读全文
摘要:1 int func(int x){ 2 int countx = 0; 3 while(x){ 4 countx ++; 5 x = x & (x-1); 6 } 7 return countx; 8 }
阅读全文

浙公网安备 33010602011771号