随笔分类 -  [010_C++基础]

摘要:一、SQLite SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite也被用于很多软件,打开飞信的安装目录,就能看见 SQLite ,估计是被用来存储聊天记录的。二、下载SQLite 我下的版本为sqlite-ama.. 阅读全文
posted @ 2012-10-16 22:11 邵贤军 阅读(445) 评论(0) 推荐(0) 编辑
摘要:看了一个多星期的C++,找了很多博客来计划铺垫未来C++学习之路,发现C++的水不是一般的深,虽然没有J2EE里面的各种框架,但是其本身已极尽复杂。个人才踩到了一点水皮,下面是摘录的一些博客上的内容,有需要学C++的,一起学习:C++高手需知知识(其中一部分,但有代表性)虚函数是什么函数?为什么需要虚函数?普通基类和虚基类的区别是什么?虚继承的作用是什么?什么是虚函数表?在多重继承关系下,虚函数表是如何存储虚函数关系的?如何通过虚函数表分析设计安全性?什么是菱形继承?菱形继承的内存布局是怎样的?菱形继承会导致什么问题?如何避免菱形继承带来的问题?什么是静态联编?什么是动态联编?它们的实现手段各 阅读全文
posted @ 2012-10-16 16:47 邵贤军 阅读(2647) 评论(3) 推荐(0) 编辑
摘要:1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 static void staticmember(){cout<<"static"<<endl;} 8 void nonstatic(){cout<<"nonstatic"<<endl;} 9 virtual void virtualmember(){cout<<"virtual"<<endl;}10 };1 阅读全文
posted @ 2012-10-16 10:22 邵贤军 阅读(1012) 评论(1) 推荐(0) 编辑
摘要:file1.c1 int arr[80];file2.c1 extern int *arr;2 int main() 3 { 4 arr[1] = 100;5 printf("%d\n", arr[1]);6 return 0; 7 }该程序可以编译通过,但运行时会出错。为什么呢?原因是,在另一个文件中用 extern int *arr来外部声明一个数组并不能得到实际的期望值,因为他们的类型并不匹配。所以导致指针实际并没有指向那个数组。注意:一个指向数组的指针,并不等于一个数组。修改:extern int arr[]。(参考:ISO C语言 6.5.4.2... 阅读全文
posted @ 2012-10-14 00:09 邵贤军 阅读(341) 评论(2) 推荐(0) 编辑
摘要:原文地址:http://coolshell.cn/articles/4119.html昨天写了一篇如何学好C语言,就有人回复问我如何学好C++,所以,我把我个人的一些学习经验写在这里,希望对大家有用。首先,因为如何学好C语言中谈到了算法和系统,所以这里就只谈C++语言。C++是最难的语言。这个世界上最难的编程语言可能非C++莫属了。你千万不要以为几天就可以学好C++,C++的学习曲线是相当BT的,你可以看看这篇文章。C++是一门很自由的语言,自由到了有点BT和恐怖的地步。我甚至认为C++并不是一门成熟的编程语言,因为太容易犯错了。所以,你一定要在一开始就要有很小心谨慎的态度,并把C++当成一种 阅读全文
posted @ 2012-10-13 00:57 邵贤军 阅读(606) 评论(0) 推荐(1) 编辑
摘要:首先有一个有趣的东西:如何不通过对象来访问对象中的虚函数呢?我们来看下面这样一段代码: 1 #include <iostream> 2 using namespace std; 3 4 typedef void (*Fun)(void); // 函数指针 5 6 class A{ 7 public: 8 virtual void testA(void){ 9 cout<<"A is Print."<<endl;10 }11 12 virtual void testB(void){13 cout<<"B is Prin 阅读全文
posted @ 2012-10-13 00:23 邵贤军 阅读(375) 评论(0) 推荐(0) 编辑
摘要:面向对象的核心:封装、继承、多态。其中多态又分为编译时多态和运行时多态。 编译时多态(静态联编):利用函数重载实现 运行时多态(动态联编):利用虚函数实现虚函数就是被关键字virtual修饰的类成员函数,它是动态联编的核心。 1. 虚函数只能是类的成员函数,并且在发生类的继承时发生作用,普通函数不能用virtual修饰。 2. 虚函数不能是static的,虚函数决定了多态,它是属于对象的,不能是唯一的。 3. 析构函数最好是虚函数,以确保在继承时,子类的析构函数也被调用。下面是虚函数的例子: 1 #include <iostream> 2 using namespace std; 阅读全文
posted @ 2012-10-12 23:30 邵贤军 阅读(393) 评论(0) 推荐(0) 编辑
摘要:1 #include <iostream> 2 using namespace std; 3 4 class Father{ 5 6 public: 7 ~Father(){ 8 cout<<"Father's Desconstruct Called."<<endl; 9 }10 };11 12 class Son : public Father{13 public:14 ~Son(){15 cout<<"Son's Desconstruct Called."<<endl;16 阅读全文
posted @ 2012-10-12 15:19 邵贤军 阅读(1950) 评论(0) 推荐(0) 编辑
摘要:1 #include <iostream> 2 using namespace std; 3 4 class Tree{ 5 public: 6 Tree(){ 7 num = 0; 8 } 9 void operator ++(){10 num++;11 }12 13 int num;14 };15 16 int main(){17 18 Tree tree;19 cout<<tree.num<<endl;20 tree++;21 cout<<tree.num<<endl;22 23 ... 阅读全文
posted @ 2012-10-11 23:48 邵贤军 阅读(300) 评论(0) 推荐(0) 编辑
摘要:浅拷贝:即类中有指针成员变量,拷贝时,只拷贝了指针变量,而没有拷贝指针变量所指向的地址块。实例代码: 1 #include <iostream> 2 using namespace std; 3 4 class Tree{ 5 public: 6 // 拷贝构造函数 7 Tree(const Tree& tree){ 8 this->num = tree.num; 9 }10 // 构造函数11 Tree(){12 num = new int(10);13 }14 // 析构函数15 ~Tree(... 阅读全文
posted @ 2012-10-11 23:38 邵贤军 阅读(423) 评论(0) 推荐(0) 编辑
摘要:C++0x引入了很多令人兴奋的好东西,其一便是右值引用。右值引用到底是什么意思呢?而与因此被命名为左值引用的用法有什么不同呢?本文将为你揭晓。 阅读全文
posted @ 2012-10-10 23:32 邵贤军 阅读(1055) 评论(0) 推荐(0) 编辑
摘要:相信很多CPPers跟我一样,曾经在指针和引用里徘徊了很久很久。经常弄混指针和引用,尤其是见到如题中列出那些用法,着实是伤脑经。后来,在项目中用着用着,就能搞清楚区别了,算是会用吧。然而,对于一个Programmer,最忌讳的就是不知其所以然,会用和懂是两番天地。停留在会用的人,始终是原地打转;而懂的人,一通百通,能举一反三。本文,就如题的指针和引用的用法做一个介绍。首先我们来普及一下概念,说明一下什么是指针和引用,这里借用一下变量名作为过渡。 ■指针 ---- 指向某一块内存的变量,其本身存储的信息就是内存地址的首地址,其类型决定指向内存的大小。 比喻,超市... 阅读全文
posted @ 2012-10-10 23:31 邵贤军 阅读(34970) 评论(2) 推荐(9) 编辑
摘要:先来看一下什么是常量指针,什么是指向常量的指针吧!1. 常量指针定义1 int * const ptr = new int();2. 指向常量的指针1 const int* ptr;上面已经看到常量指针和指向常量的指针是如何定义的了,那么他们有什么特点呢?1. 常量指针无法改变指针的值,即无法改变该指针指向的地址。因此,在定义常量指针的时候,必须要为其指定一个地址。即代码中的new int()。2. 指向常量的指针所指向的值是无法更改的,即不能修改,不能销毁。如果对指向常量的指针进行delete操作的话,编译阶段就会报错。上述二者的组合是什么呢?我们叫做指向常量的常量指针,这个指针本身无法.. 阅读全文
posted @ 2012-10-10 22:54 邵贤军 阅读(489) 评论(2) 推荐(0) 编辑
摘要:学习写程序,就不能不对程序的数据存放有一定的了解。可能你常常听说栈啊、堆啊什么的,下面咱们看看数据的存放有哪几个位置。①.栈区 存储【函数参数】以及【局部变量】,由编译器自动分配和释放②.堆区 存储程序员动态创建的对象,由程序员创建和释放③.寄存器区 存储栈顶指针(SP)和指令指针(IP),由操作系统负责④.全局区(静态区) 存储全局变量(静态变量),由操作系统负责,一般程序运行结束销毁⑤.文字常量区 存储常量字符串,比如代码中定的“HelloWorld”等,由操作系统负责⑥.程序代码区 存储代码段内容,学过汇编的话,可能知道一个汇编程序有一个叫... 阅读全文
posted @ 2012-10-10 21:51 邵贤军 阅读(398) 评论(0) 推荐(1) 编辑
摘要:关于内联函数,我们所看到的大部分书籍都是如下描述的,当然,这是我个人的语言:内联函数是什么函数呢?直接了当的说,就是用inline关键字修饰的函数,不管是全局函数,还是成员函数,只要被inline关键字修饰,它就是内联函数。内联函数与其他普通的函数有什么区别呢?内联函数在生成可执行文件时,其代码块是直接嵌入到调用处的。它与宏非常类似。当然,是否以嵌入方式存在,由编译器决定。内联函数的核心作用是利用减少函数调用的产生开销来提高程序的性能。一句话,内联函数因为把代码直接嵌入到调用处,省略了函数调用这一步,无需初始化栈,保存寄存器等等,因而节省了运行开销。当然,上面的话是完全正确的,可是大多数人仅仅 阅读全文
posted @ 2012-10-10 12:56 邵贤军 阅读(1775) 评论(0) 推荐(1) 编辑
摘要:C++依旧支持goto的,怎么能不支持goto呢?有时候goto真的相当有效率~~ 1 #include <iostream> 2 using namespace std; 3 4 int main(){ 5 int i = 0; 6 TAG:i++; 7 if(i < 10){ 8 goto TAG; 9 }10 return 0;11 }就这么简单,呵呵! 阅读全文
posted @ 2012-10-10 00:23 邵贤军 阅读(344) 评论(1) 推荐(0) 编辑
摘要:1. Windows 在VS中写好代码,在其中一个可以到达的位置设置断点,按F5启动调试,当运行到断点时,按ctrl+alt+D就可以看到汇编码了。2. Linux 写好代码,用gcc编译代码是,加上-S参数,那么就会生成一个后缀名是.s的文件,这个文件就是我们需要的汇编码文件了。具体命令如下: gcc -S mysourcefile.c 注意,是大写的S。 阅读全文
posted @ 2012-10-10 00:00 邵贤军 阅读(1140) 评论(2) 推荐(0) 编辑
摘要:const这个关键字大家肯定都很熟悉,它的意思就是,被我修饰(保护)的东西,你不能改,下面来研究一下它!1. 常量1 int main(){2 const int value = 1;3 value = 2;4 return 0;5 }上面的代码是会报错的,被const修饰的value是无法修改的。2. 常成员函数 1 class Test{ 2 public: 3 void test() const{ 4 i = 1; 5 j = 2; 6 } 7 private: 8 int i; 9 int j;1... 阅读全文
posted @ 2012-10-09 23:56 邵贤军 阅读(437) 评论(0) 推荐(0) 编辑
摘要:额,有没有想过main函数能不能声明呢?咱们来试试啊!1 #include <iostream>2 using namespace std;3 4 int main();5 6 int main(){7 system("pause");8 return 0;9 }完全没有问题,可见,main也是一个很普通的函数啊!那普通函数能不能调用main函数呢?咱们再来试试啊! 1 #include <iostream> 2 using namespace std; 3 4 int main(); 5 6 void test(){ 7 main(); 8 } 9 阅读全文
posted @ 2012-10-09 23:34 邵贤军 阅读(392) 评论(1) 推荐(0) 编辑
摘要:现在有一段源码: 1 #include <iostream> 2 using namespace std; 3 4 #define DefFunc cout<<"Hello, Define function."<<endl;\ 5 cout<<"This is a defined function"<<endl; 6 7 int main(){ 8 DefFunc 9 DefFunc10 DefFunc11 system("pause");12 return 0;13 }如书 阅读全文
posted @ 2012-10-09 23:22 邵贤军 阅读(490) 评论(1) 推荐(0) 编辑