
C/C++
Open_Mind
这个作者很懒,什么都没留下…
展开
-
C++访问属性
1、对于单个类来说,考虑到数据的安全性,private、protected成员外界都不可以直接访问,但是可以通过public接口进行访问。2、如果考虑到继承,private无论如何不能被继承,那么3P只对public和protected成员产生影响,3P改变继承来的成员的访问权限。原创 2014-01-16 09:34:47 · 1387 阅读 · 0 评论 -
类的大小
1、空类的大小空类的sizeof为1,而不是02、请看下面的类:class A{ virtual void f(){} }class B:public A{}此时,类A和类B都不是空类,其sizeof都是4,因为它们都具有虚函数表的地址转载 2014-04-02 16:35:40 · 463 阅读 · 0 评论 -
字面值常量
20 //decimal 十进制024 //octal 八进制0x14 //hexadecimal 十六进制都表示十进制的203.14F单精度浮点数原创 2014-03-24 15:02:55 · 464 阅读 · 0 评论 -
C++异常处理
while ( cin >> item1 >> item2 ){ try{ if ( !item1.same_isbn(item2) ) throw runtime_error("Data must refer to same ISBN"); cout << item1 + item2 << endl; } catch (runtime_error err){ cout <原创 2014-04-21 11:22:54 · 582 阅读 · 0 评论 -
文件流与标准流
#include using namespace std;int main(){ FILE *fin, *fout; fin = fopen("in.txt", "rb"); fout = fopen("out.txt", "wb"); int x = 0; int s = 0; while(fscanf(fin, "%d", &x) == 1){ s += x; }原创 2014-04-21 10:28:43 · 759 阅读 · 0 评论 -
sizeof若干问题
数组名和指针:#include using namespace std;int main(){ char a[10]; char * ptr = a; cout << "sizeof(a):" << sizeof(a) <<endl; cout << "sizeof(ptr):" << sizeof(ptr) <<endl; return 0;}原创 2014-03-21 11:02:29 · 460 阅读 · 0 评论 -
RTT I(运行时类型识别)
RTTI:程序能够使用基类的指针和引用来检索原创 2014-04-20 20:15:23 · 943 阅读 · 0 评论 -
向下取整和向上取整
向下取整的运算称为Floor,用数学符号⌊⌋表示;向上取整的运算称为Ceiling,用数学符号⌈⌉表示。例如:⌊59/60⌋=0⌈59/60⌉=1转载 2014-04-22 19:48:58 · 3840 阅读 · 0 评论 -
指针传递
错误程序--程序崩溃:#include #include #include void GetMemory(char* p){ p = (char *)malloc(100);}void main(){ char* str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str原创 2014-04-06 17:06:10 · 515 阅读 · 0 评论 -
C/C++混合编程注意事项
若想在C++中使用大量现成的C程序库,实现C++与C的混合编程,extern "C"一定要加在C++的代码文件中才能起作用。http://book.51cto.com/art/201202/317585.htm转载 2014-03-22 13:57:22 · 849 阅读 · 0 评论 -
#include
用 #include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。原创 2014-04-06 16:24:54 · 492 阅读 · 0 评论 -
#define
#include #define MAX(a,b) a > b ? a : busing namespace std;void main(){ int a=1; int b=2; int c = MAX(a,b); cout << c << endl;}原创 2014-04-06 16:15:07 · 529 阅读 · 0 评论 -
static
C++中static的用法总结:http://developer.51cto.com/art/201104/254141.htm原创 2014-04-08 16:48:55 · 580 阅读 · 0 评论 -
sizeof&strlen
#include using namespace std;int main(){ char s1[] = ""; cout << sizeof(s1) << endl;//1 char s2[] = "hello world"; cout << sizeof(s2) << endl;//12 char *p = s2; cout << sizeof(p) << endl转载 2014-12-24 10:48:55 · 587 阅读 · 0 评论 -
用宏定义最大值
#include using namespace std;#define max(a,b) (((a)>(b))?(a):(b))int main(){ cout << max(1+1,2+2) << endl; return 0;}4原创 2014-12-24 10:59:03 · 3605 阅读 · 0 评论 -
strcpy
char* strcpy(char* des, const char* source){ char* p = des; while((*des++ = *source++) != '\0') ; return p;}1.i=*p++ 相当于 i=*(p++),又相当于 i=*p;原创 2014-12-24 11:18:25 · 579 阅读 · 0 评论 -
条件操作符
int maxval = i > j ? i : j;//if i > j then maxval = i else maxval = j转载 2014-03-22 09:21:30 · 527 阅读 · 0 评论 -
不能重载的操作符
::.*.?:转载 2014-03-22 09:32:29 · 533 阅读 · 0 评论 -
malloc和new的区别
1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。1.转载 2014-01-25 19:12:13 · 502 阅读 · 0 评论 -
extern关键字
//1.cpp#include using namespace std;int i = 3;void next();extern void other();int main(){ next(); cout << i << endl; return 0;}void next(){ i++; other();}//2.cppextern int i;原创 2014-01-26 09:51:30 · 592 阅读 · 0 评论 -
void 指针
void的含义void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型。void指针使用规范①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。例如:int * pint;void *pvoid;pvoid = pint; /* 不过不能 pint= pvoid; */如果要将pvoid赋给其他类型指针,转载 2014-01-26 08:44:21 · 871 阅读 · 0 评论 -
空的类指针照样调用成员函数
#include using namespace std;class A{public: void a(){ cout << "func_a" << endl; }};int main(){ A * p = NULL; p -> a(); return 0;}为什么输出func_a?原创 2014-01-26 11:28:06 · 745 阅读 · 0 评论 -
多态与虚函数
#include using namespace std;class A{public: virtual void c(){ cout << "a" << endl; }};class B:public A{public: void c(){ cout << "b" << endl; }};int main(){ A * pa; B b; pa =原创 2014-01-16 10:54:48 · 582 阅读 · 0 评论 -
防止重复包含头文件
book.51cto.com/art/201202/317568.htmC语言在对程序进行编译时,会先根据预处理命令进行“预处理”。C语言编译系统包括预处理,编译和链接等部分。#ifndef x //先测试x是否被宏定义过#define x程序段 1 //如果x没有被宏定义过,定义x,并编译程序段 1#endif程序段 2 //如果x已经定转载 2014-03-18 11:11:27 · 545 阅读 · 0 评论 -
段错误
段错误--segmentation fault (often shortened to segfault):一旦一个程序发生了越界访问,cpu就会产生相应的保护,于是segmentation fault就出现了。段错误应该就是访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保护的,还有可能是缺少文件或者文件损坏。Linux环境下段错误的产生原因及调试方法小结转载 2014-03-27 15:22:40 · 711 阅读 · 0 评论 -
memset
void * memset (void * s, int ch, size_t n);函数解释:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。#include #include #include int ma转载 2014-03-21 08:37:59 · 474 阅读 · 0 评论 -
const和#define
#define:对宏的处理,在编译过程中称为“预处理”。也就是说在正式编译前,编译器必须先将代码出现的宏,用其相应的宏值替换,这个过程有点你我在文字处理软件中的查找替换。所以在代码中使用宏表达常数,归根结底还是使用了立即数,并没有明确指定这个量的类型。这容易带来一些问题,所以C++使用另一更稳妥的方法来代替宏的这一功能。#define i 5const:定义的常量具有数据类型,定义转载 2014-03-21 09:21:44 · 480 阅读 · 0 评论 -
重载
条件:参数类型不同或参数个数不同,仅仅返回类型不同是无法构成重载的。转载 2014-03-21 14:38:33 · 433 阅读 · 0 评论 -
堆和栈的区别
栈区:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,从高到低连续分配,容量较小。堆区:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 ,从低到高非连续分配,容量取决于虚拟内存大小,分配前需要查阅空闲地址链表。全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静转载 2014-01-25 18:48:31 · 580 阅读 · 0 评论 -
常量成员初始化
class point{public: point():x(0),y(0){}private: const int x; const int y;};转载 2014-03-21 14:53:36 · 597 阅读 · 0 评论 -
覆盖与隐藏
函数的覆盖发生在派生类与基类之间,两个函数必须完全相同,并且都是虚函数。其他的情况为隐藏。原创 2014-04-02 15:47:47 · 432 阅读 · 0 评论 -
const
const与指针的关系:const char *p = "hello"; // 非const指针,// const数据,就是说p指向的那个内存空间的数据是不可变的,但p还可以指向新的内存地址。char * const p = "hello"; // const指针,// 非const数据,就是说这个指针p一旦赋值或初始化,就不能在指向其他位置了,但转载 2014-03-21 16:59:45 · 488 阅读 · 0 评论 -
浅拷贝与深拷贝
如果没有自定义复制构造函数,则系统会创建默认的复制构造函数,但系统创建的默认复制构造函数只会执行“浅拷贝”,即将被拷贝对象的数据成员的值一一赋值给新创建的对象,若该类的数据成员中有指针成员,则会使得新的对象的指针所指向的地址与被拷贝对象的指针所指向的地址相同,delete该指针时则会导致两次重复delete而出错。下面是示例: 【浅拷贝与深拷贝】 #include #inclu转载 2014-03-21 19:09:41 · 458 阅读 · 0 评论 -
strncpy
字符数组就是元素为字符变量的数组而字符串则是以'\0'为结束字符的字符数组.可见字符数组并不一定是字符串如果用一个字符串字面常量来初始化一个字符数组,数组的长度至少要比字符串字面常量的长度大1,因为还要保存结束符'\0'.例如:char array[] = "Hello";数组array的元素为{'H','e','l','l','o','\0'}. char转载 2014-12-28 13:49:14 · 627 阅读 · 0 评论