C/C++
文章平均质量分 54
hexiaomin_1984
这个作者很懒,什么都没留下…
展开
-
关于指针和数组
源代码如下:#include using namespace std;void main(){ int a[2][2]={{99,2},{3,4}}; cout cout cout}输出结果为:0012FF70994结论是:(1)对于一维数组,数组名就是该数组的首元素的地址,(2)对于二维数组,数组名就是该数组的首元素的地址的地址,是一个二级指针。 *a:首元素的地原创 2014-02-24 15:01:24 · 290 阅读 · 0 评论 -
关于C++类的定义
1、类体中不允许对定义的数据成员进行初始化。2、类中的数据成员不能是自身类的对象但是可以是自身类的指针或者引用。3、构造函数可以重载,不能直接调用,在创建对象时自动调用。4、一个类只有一个析构函数,可以被调用也可以自动调用。自动调用的情形是:⑴对象的声明期结束,比如局部对象。(2)一个对象用new运算符动态创建,使用delete运算符释放时。5、拷贝初始化构造函数:用一个已知的对象原创 2014-02-24 15:01:39 · 350 阅读 · 0 评论 -
类的私有数据成员的访问
类的私有数据成员智能在类体哪被访问,不能够在类体外通过对象名直接访问,考察下面的类:class point1 {public: point1(); virtual ~point1(); void setPoint(int X,int Y,int Z); void display(); void copy(point1 m);private: int x,y,z;};point1:原创 2014-02-24 15:01:45 · 1242 阅读 · 0 评论 -
this指针
this指针隐含在类的每个成员函数中,它指向正在操作该成员函数的对象。当对象调用成员函数时,系统先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,都隐含使用this指针。可以用*this来标识该成员函数的对象。原创 2014-02-24 15:01:47 · 352 阅读 · 0 评论 -
继承类中的子对象和基类对象的初始…
考察下面的程序:class point1 {public: point1(); point1(int i); virtual ~point1();private: int x; };point1::point1(){ x=1; cout}point1::point1(int i){ x=i; cout constructor called!\n";}point1::原创 2014-02-24 15:01:58 · 441 阅读 · 0 评论 -
Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK开发环境
Android应用程序的开发环境比较容易搭建,下载完AndroidSDK,在Eclipse中安装ADT插件就好了。前段时间由于要在Android上做三维程序的开发,三维开发的资源(例如几何算法等)大多数都是C++写,如果想开发出高效的程序,那就必须用到NDK,一部分代码用C/C++编写,生成本地动态链接库libXXX.so,通过Android的JNI接口调用动态库中的本地方法。NDK实际上就是一原创 2014-02-24 15:04:59 · 525 阅读 · 0 评论 -
一个奇特的模版函数
templatevoid destroy(T* pointer){ pointer->~T();} //上面的模版函数在STL源码中使用非常频繁,是非常奇特的,即使是使用不含析构函数的int等类型去具化//这个模版函数,也是能够数据编译和运行通过,很显然,编译器对于~T()函数的调用进行了特殊的处理。原创 2014-02-24 15:04:57 · 430 阅读 · 0 评论 -
通过下标遍历std::vector,一个非常隐蔽的越界错误
对于C++标准库中vector容器的遍历是非常常见的,原创 2014-05-18 21:49:53 · 4572 阅读 · 2 评论 -
Linux下C编程:创建和执行进程
一个监控文件发生变化,进行拷贝的程序原创 2014-06-25 23:45:19 · 480 阅读 · 0 评论 -
C语言调用Python脚本中的函数
python功能强大,拥有丰富的库原创 2014-07-19 22:48:35 · 4412 阅读 · 0 评论 -
Linux下C编程:gcc和Makefile体验
下午玩了一会Linux,准备稍微系统的学习一下Linux下的C/C++开发。其实前些年学习《自己动手写操作系统》、《程序员的自我修养》、《鸟哥的Linux私房菜》等的时候,对于Linux系统的基本原理还有基本的操作也是清楚的,但是就是不系统,最关键的是没有开发过Linux系统上的产品,不管是客户端还是服务器端。 没有使用code block或者eclipse这样的ide,体验一下用命原创 2014-06-14 19:23:50 · 564 阅读 · 0 评论 -
Linux下C编程:文件拷贝 + Code Blocks/Eclipse CDT体验
代码很简单,照着书上qi原创 2014-06-15 19:37:39 · 1139 阅读 · 2 评论 -
Linux下C编程:进程间通信(IPC)总结
(1)Linux信号:一般用于内核告诉进程某种事件发生了原创 2014-07-12 23:41:52 · 517 阅读 · 0 评论 -
Linux下C编程:常用系统调用接口小结(2)
(1)int fcntl(int fd, int cmd, int arg);对原创 2014-06-22 00:31:05 · 474 阅读 · 0 评论 -
Linux下C编程:常用系统调用接口小结(1)
mode_t umask(mode_t cmask):设置当前进程的文件创建pi原创 2014-06-21 23:33:17 · 643 阅读 · 0 评论 -
Linux下C编程:线程操作
Linux下多线程开发一般是原创 2014-07-13 19:11:21 · 580 阅读 · 0 评论 -
C++程序的一些问题
第一个问题:关于变量的声明以及函数原型说明1、比如语句"int i;",则变量i同时进行了定义和声明,语句“extern i;”只是声明i是一个外部变量,这个变量也许定义在外部源文件中或者定义在本文件的其它位置。2、函数的原型声明和函数定义是分开的。函数的原型声明是没有函数体的,而函数的定义是带函数体的。函数的原型声明实质上是外部声明(默认有关键字extern),说明该函数在定义在外部源文原创 2014-02-24 15:01:37 · 376 阅读 · 0 评论 -
标识符的作用域总结
由大到小分别是:1、程序级:外部函数和外部变量。2、文件级:内部函数和外部静态变量,作用域在定义它的文件内。宏定义一般属于文件级。3、函数级:函数的形参和函数内定义的自动类变量、内部静态变量,作用域在它所定义的函数体内。4、块级:if语句、switch语句以及循环语句中的自动类变量和内部静态变量。作用域:从定义开始到相应的结束位置。举例:实例1:源代码:#inclu原创 2014-02-24 15:01:32 · 557 阅读 · 0 评论 -
函数的传址调用和引用调用
C++中函数的调用有三种:传值调用、传址调用和引用调用,其中引用调用是C语言中没有的。传值调用比较简单,这种调用不能改变形参的值,传址调用和引用调用中形参的改变可以改变实参的值,下面分别予以介绍:(1)传址调用:形参是指针 //函数定义: void swap(int *x,int *y) { int temp; temp=*x;原创 2014-02-24 15:01:30 · 1417 阅读 · 0 评论 -
关于类的定义(续)
1、类的定义和声明是同时的,在同一个源文件中对同一个类只能有一次声明,但是不同源文件中可以声明同一个类。比如在Point1.h中定义了一个类,那么其它源文件都可以包含这个文件。2、类体中包含了成员函数的声明,而成员函数的定义是在类体外的。类的成员函数的定义同一般函数是一样的,同样属于外部函数(隐藏了关键字extern) ,在程序的所有源文件中(.cpp)只能定义一次。3、基于以上两点,在进原创 2014-02-24 15:01:43 · 379 阅读 · 0 评论 -
数组和指针(2)
一、对象数组的赋值,可以用构造函数,例如有DATA类,则如下写法是合法的: DATE datas[5]={DATE(7,22,1998),DATE(7,23,1998),DATE(7,24,1998)} dates[3]=DATE(7,25,1998) dates[4]=DATE(7,26,1998)二、指向数组的指针和指针数组 指向数组的指针:原创 2014-02-24 15:01:49 · 328 阅读 · 0 评论 -
堆对象
堆对象就是在程序运行过程中可以随时建立或删除的对象,可以用new运算符(或malloc函数)或者delete运算符(或free函数)。1、new运算符 new (初始值列表) 注:初始值列表可以省略 new运算符返回一个指针,指针类型与new对象所分配的对象相匹配。 例子1: int *a; a=new int(2); (相当于在后面又加了一句*a=2;)原创 2014-02-24 15:01:54 · 399 阅读 · 0 评论 -
引用作为函数返回值
下面是一个一般函数int f(int i){ return i;}如果有下列语句int b=f(6);则系统先建立一个临时变量,将返回值赋给temp,然后在将temp赋给b,值得注意的是,临时变量在执行完int b=f(6)之后,生命期就结束了。所以语句int &b=f(6);是非法的,因为b不能做一个临时变量的别名。 考察下列函数:#include int &f(int原创 2014-02-24 15:02:00 · 334 阅读 · 0 评论 -
赋值兼容规则及虚函数
赋值兼容规则:在需要基类对象的任何地方,都可以使用公有派生类的对象来替代,这时派生类对象得到了基类中除了构造函数、析构函数之外的成员。具体说来有以下几种情况:(1)派生类的对象赋值给基类对象(2)派生类的对象初始化基类的引用(3)派生类对象的地址赋值给指向基类的指针在替代之后,派生类的对象就可以作为基类的对象使用,但是只能使用从基类继承的成员。 在C++中虚函数是动态联编的原创 2014-02-24 15:02:02 · 879 阅读 · 0 评论 -
《C++ Primer》第4版不适合初学者…
虽然作者宣称这是一本很好的入门书,但是通过我的阅读,我可以肯定地说这本书不适合C++的初学者去阅读,而较为适合对C++语言有一定基础并且编写过相当程序的人员。这本书讲得很细,一般的疑难问题都讲得比较清楚,但是如果基础不好会看得比较头疼。按照我的经验,学习C++国内有很好的入门教材,我推荐清华大学郑莉的《C++语言程序设计》、清华大学吕凤翥的《C++语言基础教程》以及钱能的《C++程序设计》(大概是原创 2014-02-24 15:02:06 · 530 阅读 · 0 评论 -
编译器对拷贝初始化函数和重载的赋…
简单的说,有两句话1、对于编译器合成的拷贝初始化函数和重载的赋值运算符,编译器自动产生代码来调用基类的拷贝初始化函数和重载的赋值运算符,并且依次调用成员对象(相对于简单类型如int而言)的拷贝初始化函数和重载的赋值运算符。2、对于显式定义的拷贝初始化函数和重载的赋值运算符,编译器不会在其中产生代码来调用基类的拷贝初始化函数和重载的赋值运算符,也不会产生代码来依次调用成员对象(相对于简单类原创 2014-02-24 15:02:25 · 452 阅读 · 0 评论 -
VC 6.0中添加控件变量后对话框无法…
网上有朋友使用VC6.0制作对框框时,有时候在添加了某个控件并为控件添加了变量后,对话框就无法弹出。本人也遇到过这种情况,操作完全正确,后来发现只需“buildall”一下就可以了,不要仅仅是“build”。我认为这是VC6.0的一个bug。原创 2014-02-24 15:02:32 · 762 阅读 · 0 评论 -
《Windows核心编程》读书笔记(4)
第六章——线程的基础知识(1)线程由两部分组成:1、线程的内核对象,操作系统对它对线程实施管理。2、线程堆栈,用于维护线程在执行代码时所有函数参数和局部变量 同一个进程中的线程能够共享内核对象句柄,因为句柄表依赖于进程的。 Windows系统提供的创建线程的函数(各个编译器会提供替代函数,后面章节会讲述): HandleCreateThread; 线程的终止有四种途径1、原创 2014-02-24 15:02:45 · 310 阅读 · 0 评论 -
placement new体验
#include using namespace std;class A{public: A(); A(const A&); int i;};A::A(){ i = 0; cout <<"default"}A::A(const A&){ cout <<"copy"}void main(){ A a; a.i = 1; A b; b.i = 2;原创 2014-02-24 15:04:52 · 392 阅读 · 0 评论 -
关于宏定义
源代码:#include using namespace std;void main(){ int b(5); #define b 2 #define f(x) b*(x) int y(3); cout #undef b cout #define b 3 cout}运行结果为:82012结论:预处理命令执行在编译之前,而且在进行宏替换时,只是简单的文原创 2014-02-24 15:01:26 · 433 阅读 · 0 评论 -
关于常类型
1、一般常量 例子 int const x=2或const int x=2 int const a[6]={1,2,3,4,5,6}或const int a[5]={1,2,3,4,5,6} 常对象: class A; const A a1(1,2); A const a2(3,4); 总之,定义一般常量时要进行初始化2、常指针和原创 2014-02-24 15:01:51 · 436 阅读 · 0 评论 -
关于析构函数和拷贝初始化函数
考察下面的程序。#include class TPoint {public: int Ycoord(); int Xcoord(); TPoint(TPoint &p); TPoint(); TPoint(int x,int y){X=x;Y=y;} virtual ~TPoint();private: int Y; int X;};TPoint::TPoint(){}TPoin原创 2014-02-24 15:01:56 · 425 阅读 · 0 评论 -
在VC中添加新的源文件出现错误“在…
方法一:在该源文件的最顶层添加 #include "stdafx.h"方法二:打开项目属性,找到“C/C++”标签页,单击“预编译头”属性页。修改“创建/使用预编译头”属性为“不使用预编译头”。 具体分析如下: 预编译头文件的使用 关键字:预编译,/Yu,/Yc,/Yx本文介绍VC6的预编译功能的使用,由于预编译详细使用比较的复杂,这里只介绍几个最重要的预编译指令:/Yu, /原创 2014-02-24 15:02:08 · 567 阅读 · 0 评论 -
关于new、operator new和placement…
看起来不可能的事情在C++中总能找到解决的办法。正如,直接调用构造函数是不可能的,然而可以用placementnew欺骗编译器调用构造函数。1、placement new为何物?placementnew是重载operator new的一个标准、全局的版本,它不能够被自定义的版本代替(不像普通版本的operator new 和 operator delete能够被替换)。voi原创 2014-02-24 15:02:30 · 342 阅读 · 0 评论 -
The ultimate SO_LINGER page, or: why is my tcp not reliable
转自:http://blog.csdn.net/cpp_chen/article/details/29864509This post is about an obscure corner of TCP network programming, a corner where almost everybody doesn’t quite get what is going on. I used转载 2016-08-28 16:16:15 · 662 阅读 · 0 评论