![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
csdn_gddf102384398
这个作者很懒,什么都没留下…
展开
-
C++类成员函数指针
C++类成员函数指针原创 2022-11-28 13:28:45 · 247 阅读 · 0 评论 -
《COM本质论》学习第一章
COM本质论学习笔记转载 2020-11-03 21:07:03 · 132 阅读 · 0 评论 -
sscanf函数的陷阱
以下代码执行后期望a的值是0x12345678,但是实际执行后a的结果是0x00000078int num = 0;sscanf("12 34 56 78","%02X %02X %02X %02X", (unsigned char*)&num + 3, (unsigned char*)&num + 2, (unsigned char*)&num + 1, (unsigned char*)&num );原因是,sscanf函数接收的参数类型是voi原创 2020-08-31 07:02:14 · 373 阅读 · 0 评论 -
c/c++绝对值函数不要使用abs,应该使用fabs
c/c++绝对值函数不要使用abs,应该使用fabs函数需要包含math.h文件。VC++中使用abs函数需要包含#include <cmath>原创 2020-08-01 11:01:22 · 1241 阅读 · 0 评论 -
C++通过实现String类描述运算符重载和临时字符串对象调用c_str方法带来的隐藏问题
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <iostream>using namespace std;class String{public: String() { //cout << "无参构造函数" << endl; m_psz = NULL; m_length = 0; } String(con原创 2020-06-21 13:39:36 · 195 阅读 · 0 评论 -
单链表逆置
typedef struct tagNode{ int data; struct Node* next;}Node;void Reverse(Node* pHead){ Node* pReverse = pHead; Node* pCurrent = pHead->next; Node* pFirst = pHead->next; Node* pTail = NULL; Node* pTmp; if (!pHead) return; while (pCurre原创 2020-06-20 10:14:45 · 202 阅读 · 0 评论 -
libcurl实现的FTPClient
FTPClient.h#ifndef FTPClient_H#define FTPClient_H#if defined(_MSC_VER) || defined(_WIN32)#define _CRT_SECURE_NO_WARNINGS#pragma comment(lib,"libcurld.lib")#endif#include <stdio.h>#include <curl.h>typedef int(*pfunc_progress_callback原创 2020-06-16 17:28:58 · 281 阅读 · 0 评论 -
C++动态创建对象基本原理
/* * C++动态创建对象基本原理*/#include <stdio.h>#include <iostream>#include <map>#include <string>using namespace std;typedef void* (*pfCreateObject)();map<string, pfCreateObject> g_Map;template<class T>void* CreateP原创 2020-06-05 16:05:44 · 181 阅读 · 0 评论 -
C++禁止返回局部对象的引用
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>class A{public: A() { printf("A的构造函数\n"); strcpy(m_buf,"hello"); } A(const A& a) { printf("A的拷贝构造函数\n"); strcpy(m_buf, a.m_buf); } ~A() { printf("A的原创 2020-05-31 16:41:55 · 215 阅读 · 0 评论 -
FILE操作vector
#include <stdio.h>#include <iostream>#include <vector>using namespace std;int main(){ FILE* fp=fopen("test.dat","wb"); vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3);原创 2020-05-29 17:55:11 · 320 阅读 · 0 评论 -
C++类的虚表
#include <iostream>using namespace std;//每个类的虚表都不同//只要包含了虚函数,则这个类就有一个独立于其它类的虚表class A{public: virtual void f1() { cout << "A的虚函数" << endl; }};class B :public A{publi...原创 2020-02-28 17:38:55 · 410 阅读 · 0 评论 -
C++数据运算注意事项
#include <stdio.h>int main(){ unsigned char* p; int i1 = 0xFFFFFFFF; p = (unsigned char*)&i1; printf("%X,%X,%X,%X\n", p[0], p[1], p[2], p[3]); float f1 = 0x7FFFFFFF;//f1在内存中不会按照字面值...原创 2019-07-23 11:14:27 · 194 阅读 · 0 评论 -
Linux使用信号量解决线程互斥问题(卖票程序)
/*compile:g++ -D_REENTRANT -lpthread xx.cpp*/#include <stdio.h>#include <pthread.h>#include <unistd.h>#include <semaphore.h>int ticket = 20;sem_t mutex;void* thre...原创 2019-03-28 19:47:17 · 552 阅读 · 0 评论 -
C++的静态成员变量必须在类外定义,即使是类的对象。
#include <stdio.h>class A{public: void f1() { printf("A::f1\n"); }};class B{public: void f2() { printf("B::f2\n"); a.f1(); } static A a;//声明静态对象};A B::a;//必须在类外定义,否则会链接出...原创 2019-04-06 19:17:13 · 3287 阅读 · 0 评论 -
extern "C"{...}的作用
假设有add.c文件如下:int add(int x, int y){ return x + y;}为了使main.cpp能使用add函数,add.h应该为:#ifndef ADD_H#define ADD_H//如果此头文件被包含在C++源程序文件中,则按照C++编译时,会对声明的函数进行名字改编,//如果头文件所声明的函数是C语言实现的,则链接就会因为找不到名字而出错。为...原创 2019-03-22 23:21:43 · 387 阅读 · 0 评论 -
重载C++的new和delete
重载C/C++标准库的内存管理函数(比如malloc,free,operator new,operator delete,operator new[],operator delete[])时,编译器会忽视重定义,所以不用担心链接时会产生重定义错误。operator new,operator delete,operator new[],operator delete[]这些函数如果定义在类中,则默...原创 2019-03-25 15:10:19 · 224 阅读 · 0 评论 -
C++的dynamic_cast用法
#include <iostream>using namespace std;class A{public: virtual void display() { cout << "A::display()" << endl; }};class B :public A{public: void display() { cout ...原创 2019-02-26 21:17:32 · 488 阅读 · 0 评论 -
C/C++面试题回顾
1、实现C语言atoi函数的功能,实际我的函数功能要比atoi强大int my_atoi(const char* str){ if (str == nullptr) return 0; int str_length = strlen(str); char* p = (char*)calloc(str_length, sizeof(char)); int i = 0, j = 0;...原创 2019-02-15 22:11:47 · 224 阅读 · 0 评论 -
C++对象的复制与赋值,以及以对象作为函数的参数和以对象作为函数的返回值
这是我对“C++对象的复制与赋值,以及以对象作为函数的参数和以对象作为函数的返回值”的理解,若有不对之处还望业内同仁指正,在下感激不尽!下面用代码论述之:#include<iostream>using namespace std;class Dog{public: Dog(){cout << "调用了无参构造函数" << endl;}...原创 2018-07-26 09:43:14 · 1311 阅读 · 0 评论 -
C++父类和子类的关系以及指针和引用在派生中起到的作用
#include<iostream>using namespace std;class Base{public: void Method1() { cout << "This is Base's method1." << endl; } virtual void Method2() { ...原创 2018-08-07 08:47:28 · 923 阅读 · 0 评论 -
类似示波器显示波形的Windows程序(Win32 API实现)
以下是我用C语言写的一个实现了示波器功能的Windows程序,显示波形,其显示风格同示波器一样,以下是源码,如有不正支持求大神赐教!#include&lt;Windows.h&gt;#include&lt;math.h&gt;//必须包含,否则调用sin不起作用#define ID_START_BTN 1#define ID_TIMER 2#define START_BTN_W...原创 2018-08-03 16:03:28 · 1843 阅读 · 0 评论 -
多线程之多生产者,多消费者,多缓冲区问题解决(Win32API实现)
/* 多线程之多生产者,多消费者,多缓冲区问题*/#include<stdio.h>#include<windows.h>#include<process.h>#define BUF_SIZE 10int buffer[BUF_SIZE]; //缓冲区int in=0, out=0;HANDLE hEmpty, hFull;C...原创 2018-08-17 10:02:33 · 1752 阅读 · 2 评论 -
C++循环队列
队列如果使用链式存储结构则很容易实现,但是队列一般用于对大量数据进行频繁的入队和出队操作,若采用链式存储结构,则要频繁对内存进行分配和去配操作,开销很大,效率很低,因此如果要频繁的入队或出队操作时,链式结构是不合适的,而采用顺序存储结构的循环队列则很好的解决了这个问题。MyQueue.h#pragma onceclass MyQueue{public: MyQueue(int ite...原创 2018-10-10 16:48:21 · 3251 阅读 · 1 评论 -
C/C++数组指针、指针数组、函数指针、函数指针数组的用法
#include &amp;amp;lt;iostream&amp;amp;gt;using namespace std;void fun1(int(*pArr)[3], int row){ int i,j; for (i = 0; i &amp;amp;lt; row; i++) { for (j = 0; j &amp;amp;lt; 3; j++) cout &amp;amp;lt;&原创 2018-12-02 19:07:22 · 298 阅读 · 0 评论 -
C/C++结构体用法及其对齐原则
#include &lt;iostream&gt;using namespace std;/* ①结构体变量的首地址(比如结构体数组就要考虑到结构体本身的地址)能够被其最宽基本类型成员的大小所整除; ②结构体每个成员相对结构体首地址的偏移量(offset)都是该成员大小的整数倍,如有需要编译器会在成员之间加上填充字节; ③结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译...原创 2018-12-02 19:30:57 · 251 阅读 · 0 评论 -
C++拷贝构造函数和运算符重载(VC实现)
String.h文件:#ifndef STRING_H#define STRING_H#include <ostream>using namespace std;class String{public: String(){ m_pStr = nullptr; } String(const char* pStr); String(const String&...原创 2018-12-02 20:47:20 · 198 阅读 · 0 评论 -
关于套接字的绑定
基于TCP/IP的套接字,由两元组构成,即(IP地址,端口号)无论是在同一进程还是不同进程中,1、两个不同的IP地址可以监听同一端口,构成两个不同的套接字;2、两个相同的IP地址监听不同的端口,构成两个不同的套接字。...原创 2018-12-03 21:08:08 · 1013 阅读 · 0 评论 -
基于TCP的C/S模式模板(Winsock实现)
服务器程序server.cpp:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <tchar.h>#include <locale.h>#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")void ShowS...原创 2018-12-03 22:33:08 · 641 阅读 · 0 评论 -
数据解析
对于面向字节流的协议,如串口通信、TCP,数据解析方法简介如下(以串口为例):读取串口: BYTE readBuf[BUF_SIZE]; DWORD dwRead; DWORD dwWantRead = BUF_SIZE; DWORD dwResolveSuccess = 0; while (pctcb->bStartCheck) { dwRead = 0; if...原创 2018-12-29 14:53:48 · 272 阅读 · 0 评论 -
C++关于运算符重载
友元函数不是类成员函数,而是一个普通函数。友元函数只是在类中用friend修饰的函数,之所以在类中声明,是为了使这个普通函数可以访问类中的私有成员。在运算符重载中,如果运算符重载函数被定义为类成员函数,则可以省略一个函数参数,因为已经隐含了this指针;如果运算符重载函数不是类成员函数,当然也就没有this指针了,但由于运算过程中要访问类的私有数据成员,所以需要将运算符重载函数在类中声明为友元函...原创 2019-01-20 13:43:53 · 119 阅读 · 0 评论 -
常用算法
#include &lt;stdio.h&gt;//顺序查找1,查找成功返回关键码在数组中的位置,位置从1开始;查找失败返回0。这种方法每次都要判断数组是否越界,效率较低int SeqSearch1(int* pArr,int n,int k){ int i; for (i = 0; i &lt; n; i++) { if (pArr[i] == k) return i +...原创 2019-01-21 10:10:43 · 149 阅读 · 0 评论 -
C++拷贝构造函数调用的时机
#include <stdio.h>#include <iostream>using namespace std;class A{public: A(){ cout << "A的无参构造函数" << endl; } A(const A& a){cout << "A的拷贝构造函数" <&原创 2019-01-21 10:45:54 · 398 阅读 · 0 评论 -
网络通信编程
IOCP的介绍:https://www.cnblogs.com/talenth/p/7068392.html进程间通信介绍:https://www.cnblogs.com/findumars/p/6329593.html多线程同步介绍:1、用户模式的多线程同步有:原子操作(Interlocked函数)、临界区CRITICAL_SECTION、条件变量、Slim读写锁等2、内核模式的线程...原创 2019-01-22 11:06:02 · 353 阅读 · 0 评论 -
Windows程序模板
#include <Windows.h>#include <tchar.h>HINSTANCE hInst;LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE...原创 2019-02-03 18:30:22 · 515 阅读 · 0 评论