关闭
当前搜索:

C++函数的数组形参

1 不允许将实参数组拷贝给形参 不能将数组的内容拷贝给其它数组作为其初始值,也不能用数组为其它数组赋值。 int a[] = {0, 1, 2}; int a2[] = a;//错误,不允许使用一个数组初始化另一个数组 a2 = a;//不能把一个数组直接赋值给另一个数组 所以,当数组作为函数的实参时,不能将其元素拷贝给形参。 2 将数组名转换为指针 在很多用到数组名字的地方,编译器都...
阅读(15) 评论(0)

C++函数返回值为局部变量

C++函数的返回值是局部变量时,该返回值可能是值类型、指针类型和引用类型。 以自定义类型MyStruct为例: struct MyStruct { int x; int y; }; 1 返回值是自定义结构的值类型 定义一个返回值为MyStruct的函数MyProc1()。 MyStruct MyProc1() { MyStruct l_mystruct; l_mystruct.x =...
阅读(19) 评论(0)

C++自动类型转换

在C++中,如果编译器看到一个表达式或函数调用使用了一个不合适的类型,它会执行一个自动类型转换,将不合适的类型转换为合适的类型。对于自定义类,可以通过定义该类的构造函数的方法将其它类型转换为本自定义类;或者使用运算符将本自定义类转换为其它类型。 1 定义构造函数将其它类型转换为本类型 对于一个自定义类,可以为该类定义一个有一个参数的构造函数。则编译器可以将这个函数对应的类型转换为该自定义类类型...
阅读(22) 评论(0)

安卓定时器类Timer与消息处理类Handler

安卓串口编程中,需要循环判断串口中是否有数据到来,如果有数据到来,则接收数据。可以通过定时器类Timer和消息处理类Handler来实现以上功能。 1 定时器类Timer Timer表示定时器类,该类可以为后台进程安排要执行的任务。每个Timer对象相对应一个后台线程,用于顺序地执行任务。 1.1 创建定时器类对象 在onCreate()方法中通过new创建Timer类的对象。 Time...
阅读(37) 评论(0)

Windows7 64位配置ODBC数据源的方法

在64位Windows中,默认的ODBC数据源是64位。所以,通过“控制面板->ODBC(32位)”进入ODBC数据源管理器,之后点击“添加”按键,此时“创建新数据源”对话框中,“选择您想为其安装数据源的驱动程序”列表中只有SQL Server等驱动程序,而没有其它的驱动程序,如图1所示。   图1 选择驱动程序 64位Windows的32位ODBC管理器的位置在“C:\Window...
阅读(48) 评论(0)

“Incremental Linker已停止工作”的处理方法

VS2008在Windows7 64位下编译程序时,有时会发生“Microsoft Incremental Linker已停止工作”的对话框,如图1所示。“Incremental Linker”表示VS2008的增量链接器。   图1 报错窗口 解决的方法是在VS2008的菜单栏“项目->XXX属性”,之后在“XXX属性页”对话框的左侧选择“配置属性->链接器->常规”,之后在右侧的...
阅读(43) 评论(0)

C++函数的返回值(下)

前面我们介绍了函数返回值是内置值类型、自定义值类型和引用类型的处理方法。本文将介绍函数的返回值是const指针类型时的处理方法。 1 指向常量的指针 指向常量的指针(pointer to const)不能用于改变其所指向对象的值。想要存放常量对象的地址,只能使用指向常量的指针。 const double pi = 3.14; double *ptr = π//错误,ptr是非const指针 ...
阅读(35) 评论(0)

C++函数的返回值(中)

在“C++函数的返回值(上)”中,介绍了函数返回值是非const类型的情况。本文将介绍函数返回值是值类型且为const的情况,返回值是引用类型且为const的情况将在“C++函数的返回值(下)”中介绍。 1 返回值是const内置类型时 在“C++函数的返回值(上)”中提到,对于返回值是值类型的函数,其返回值保存在临时对象中,且该临时对象是const。所以,对于返回值是的内置类型的函数来说,即...
阅读(25) 评论(0)

C++函数的返回值(上)

对于C++有返回值的函数来说,其返回值的类型可以是值类型,也可以是引用类型。 1 返回值为值类型的函数 使用临时对象(temporary object)来保存函数的返回值。函数的返回值用于初始化调用点的一个临时对象,该临时对象就是函数调用的结果。如 int func() { return 1; } int i = func();此时,有一个临时对象用来保存func()函数的返回值1,之后将临...
阅读(54) 评论(0)

C++浮点型变量的存储方式

1 浮点类型简介 浮点型是C++定义的基本类型。类型float、double和long double分别表示单精度浮点数、双精度浮点数和扩展精度浮点数。在Visual Studio中,float类型用4个字节表示,double和long double用8个字节表示。 默认的浮点字面值常量为double类型。在数值的后面加上F或者f表示单精度,在数值后面加上L或者l表示扩展精度。 ...
阅读(61) 评论(0)

MFC基于select模型的套接字类之服务器(8)

4 停止服务器 为CTCPSocket_Server类添加访问权限为public的成员函数StopServer()。在该函数中主要完成的工作是关闭“2.3 StartServer()函数”中提到了用于接受客户端连接的线程和用于接收客户端数据的线程。 4.1 结束接受客户端连接的线程 在“2.3 StartServer()函数”中提到,该线程由CTCPSocket_Server类的成员变量...
阅读(48) 评论(0)

MFC基于select模型的套接字类之服务器(7)

2.3.6 创建接收客户端数据的线程 为CTCPSocket_Server类添加访问权限为private的成员函数Newconnect(),在该函数中调用CreateThread()函数创建接收客户端数据的线程。 int index = m_client_currentindex; m_recvdata_threadhandle_array[index] = CreateThread(NULL...
阅读(38) 评论(0)

MFC基于select模型的套接字类之服务器(6)

(2)套接字的Select模型 Select模型是套接字中最常见的模型。它的核心是利用select()函数实现套接字的输入输出管理。利用select()函数,应用程序可以判断指定套接字上是否存在数据,如果套接字上存在数据,则调用recv()函数进行接收;还可以通过该函数判断能否向指定套接字上发送数据,即指定套接字是否已经准备好接收数据,如果已经准备好,则调用send()函数发送数据。 在使用S...
阅读(45) 评论(0)

MFC基于select模型的套接字类之服务器(5)

2.3.4 创建新线程接收连接 在定义了线程函数之后,回到CTCPSocket_Server类的StartServer()函数中。接下来通过CreateThread()函数创建ThreadFunc_StartServer()的线程,接受来自客户端的连接。 (1)CreateThread()函数 该函数的作用是创建新线程,其格式为 HANDLE WINAPI CreateThread( ...
阅读(35) 评论(0)

MFC基于select模型的套接字类之服务器(4)

(1)循环接收连接 在“1.4 监听套接字”中提到,服务端调用listen()函数等待客户端连接。当有客户端连接服务端时,就需要调用accept()函数接收客户端的连接。为了使服务端能够接受多个客户端的连接,需要在while()循环中调用accept()函数。 为了能够在主程序中控制线程,将CTCPSocket_Server类的一个bool类型的成员变量m_acceptthread_alive...
阅读(35) 评论(0)

MFC基于select模型的套接字类之服务器(3)

2 启动服务器 启动服务器的主要动作就是创建一个新线程,在该线程中接收来自客户端的连接。为CTCPSocket_Server类添加public权限的成员函数StartServer(),用于启动服务器。当接收了客户端连接后,如果程序需要在主窗口中显示该客户端的信息,则需要在StartServer()中调用主窗口的函数,这就要用到回调函数。在CTCPSocket_Server类中定义函数指针的成员变...
阅读(33) 评论(0)

MFC基于select模型的套接字类之服务器(2)

1.3 绑定套接字 通过bind()函数绑定套接字,该函数的格式为 int bind(SOCKET s, const struct sockaddr* name, int namelen);其中,参数s表示要绑定的套接字;name是要绑定的套接字地址;namelen是name的大小。如果绑定套接字成功,则返回值为0,否则返回SOCKET_ERROR。 1.3.1 sockaddr_in与so...
阅读(37) 评论(0)

MFC基于select模型的套接字类之服务器(1)

C/S(Client/Server)结构的网络软件分为客户端和服务端。客户端和服务端担任不同的任务。一般来说,客户端将用户的需求提交给服务端,再将服务端返回的结果以一定形式提供给用户。服务端的任务是接收客户端的服务请求,进行响应处理,并将结果返回给客户端。 本文提到的服务端的流程如图1所示。在服务端的主线程中创建接受客户端连接的线程,在该线程中创建多个接收客户端数据的线程用来与多个客户端进行通信...
阅读(39) 评论(0)

C++二维数组

如果数组的元素又是数组,则称为二维数组。例如 int a[3][4] = { {0, 1, 2, 3} , {4, 5, 6, 7} , {8, 9 ,10 ,11} };可以将a看成一个数组,这个数组中有3个元素,每个元素又是一个包含4个int的数组。 1 二维数组的标识符 当给出二维数组名而没有方括号时,可以将其看作是二维数组的标识符。该标识符不是左值,不能给它赋值,可以将其看作是数组的...
阅读(114) 评论(0)

C++中友元及继承

在C++中定义类时,可以通过三个访问说明符(access specifier)来指定其成员的访问权限。 1 访问说明符 这三个访问说明符分别是public、private和protected。其中,public表示该成员可以被所有的人访问;private则与public刚好相反,它表示该成员只能被类内的成员函数访问;而protected表示该成员只能被类内函数和该类的派生类对象访问。 2 友...
阅读(230) 评论(0)
159条 共8页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:41197次
    • 积分:1949
    • 等级:
    • 排名:千里之外
    • 原创:159篇
    • 转载:0篇
    • 译文:0篇
    • 评论:6条
    最新评论