C/C++
文章平均质量分 60
░冷░月░
这个作者很懒,什么都没留下…
展开
-
C++ 模板实现Vector和双向链表
模板实现Vector#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>#include <assert.h>using namespace std;template<class T>class Vector{public: Vector() :_pData(new T[3]) ,_size(0)原创 2017-08-03 10:16:08 · 1045 阅读 · 0 评论 -
C++类和对象--默认成员函数
类(class/struct):数据(成员变量);程序(成员函数)。访问限定符:public(公有),protected(保护),private(私有)。特点:1. public成员可从类外部直接访问,private/protected成员不能从类外部直接访问。2. 每个限定符在类体中可使用多次,它的作用域是从该限定符出现开始到下一个限定符之前或类体结束前。原创 2017-06-29 21:03:04 · 376 阅读 · 0 评论 -
C++重载运算符的规则详解
(1)C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。例如,有人觉得BASIC中用“* *”作为幂运算符很方便,也想在C++中将“* *”定义为幂运算符,用“3* *5”表示35,这是不行的。(2)C++允许重载的运算符C++中绝大部分运算符都是可以被重载的。不能重载的运算符只有5个:. (成员访问运算符).*转载 2017-07-25 09:19:25 · 1418 阅读 · 1 评论 -
C++ 多态
多态:具有多种形式或形态的情况。分为静态多态、动态多态。静态多态:编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推 断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。包含函数重载、泛型编程。 动态多态:动态绑定:在程序执行期间(非编译期)判断所引用对象的实际类型,根据其实际类型调用相应的方法。必须是虚函数,然后通过基类类型的引用或者指针调用虚函数原创 2017-07-27 17:40:37 · 235 阅读 · 0 评论 -
C++深浅拷贝
简单赋值浅拷贝(只赋值拷贝,不重新分配空间)#include #include using namespace std;class String{public: String(char* str = "") :_str(str) {} String(const String& str) :_str(str._str) {} String& operator =原创 2017-07-08 23:47:00 · 199 阅读 · 0 评论 -
C/C++动态内存管理
C语言动态内存管理(malloc/calloc/realloc/free) int* p1 = (int*)malloc(sizeof(int));//malloc返回值类型为void* int* p2 = (int*)calloc(1, sizeof(int));//动态分配并初始化为0 int* p3 = (int*)realloc(p1, sizeof(int)*2);//当p1原创 2017-07-08 00:28:26 · 346 阅读 · 0 评论 -
构造拷贝构造的N种调用情况
#define _CRT_SECURE_NO_WARNINGS 1#include using namespace std;class Date{public: Date() { cout"Date()"<<endl; } Date(const Date& d) { cout"Date(const Date& d原创 2017-07-07 20:42:09 · 365 阅读 · 1 评论 -
调用约定
在windows平台上的C++编程中经常会看到一些__stdcall, __cdecl, WINAPI, CALLBACK等等关键字在函数前面,在.NET中还有__clrcall, __thiscall等关键字,有时加不加它们都可以,但是有时必须加上,不然编译不过。本文要讨论的就是这些关键字:调用约定(Calling Convention),有时也叫做“函数调用约定”或者“调用规范”。本文采用MS转载 2017-07-17 15:08:18 · 499 阅读 · 0 评论 -
C++实现顺序表和单链表
#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace std;class Date{public: Date() { cout<<"Date()"<<endl; } Date(const Date& d) { cout<<"Date(cons原创 2017-07-20 15:34:43 · 343 阅读 · 0 评论 -
C++ 引用计数写时拷贝
写时拷贝技术原理 写时拷贝技术是通过"引用计数"实现的,在分配空间的时候多分配4个字节,用来记录有多少个指针指向块空间,当有新的指针指向这块空间时,引用计数加一,当要释放这块空间时,引用计数减一,直到引用计数减为0时才真的释放掉这块空间。当有的指针要改变这块空间的值时,再为这个指针重新分配自己的空间(旧的空间的引用计数减一,新分配的空间引用计数加一)。写法一(有缺陷)#d原创 2017-07-14 23:51:05 · 263 阅读 · 0 评论 -
模板的分离编译
给出模板类,但未实例化Sep_Compile.h#include <iostream>using namespace std;template<class T>class Test{public: Test(); T _t;};Sep_Compile.cpp#include "Sep_Compile.h"template<class T>Test<T>::Test()原创 2017-08-16 22:29:47 · 230 阅读 · 0 评论 -
头文件在.c/.cpp中引用和.h文件引用
头文件在.c/.cpp中引用和.h文件引用a.h头文件中的变量.cpp文件函数的相互调用原创 2017-08-16 23:56:20 · 22240 阅读 · 0 评论 -
模拟实现容器适配器 stack queue
模拟实现stack(只能栈顶操作数据,后进先出)模拟实现queue(只能队列头部操作数据,先进先出)原创 2017-08-15 10:23:16 · 214 阅读 · 0 评论 -
C++ 继承
继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承关系&访问限定符继承方式与成员访问权限测试代码#include using namespace std;class Person{public: int _age;protected: int _weight;p原创 2017-07-25 12:17:20 · 215 阅读 · 0 评论 -
在旋转之后的已排序数组中查找一个数字
图示说明函数实现#include int main(){ int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; int len = sizeof(arr)/sizeof(arr[0]); int i = 0; int j = 0; for(i=0; i<len-1; i++) { for(j=0; j<len-i-1; j++原创 2017-06-14 10:21:32 · 236 阅读 · 0 评论 -
C语言实现单链表面试题--基础篇
void Print_TailToHead(ListNode *pList)//从尾到头打印{ if(!pList) { printf("NULL"); return; } Print_TailToHead(pList->next); printf("->%d", pList->data);}void Erase_Notail(ListNode *pos)//删除一个无原创 2017-06-12 17:46:37 · 695 阅读 · 0 评论 -
C++ 类型萃取
类型萃取(图比代码思路清晰)#include <iostream>using namespace std;//结构体定义不同的标签flag是为了区分 内置/自定义类型struct TrueType{};struct FalseType{};template<class T>struct TypeTraits{ typedef FalseType IsPODType;};//原创 2017-08-03 11:27:30 · 275 阅读 · 0 评论 -
C++循环引用和仿函数的使用
循环引用仿函数的使用:定制删除器,多重冒泡排序原创 2017-08-18 01:13:29 · 616 阅读 · 0 评论 -
C++菱形继承和菱形虚拟继承
单继承&多继承&菱形继承单继承:一个子类只有一个直接父类时称这个继承关系为单继承。多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承菱形继承(钻石继承)存在二义性和数据冗余问题。#include using namespace std;class A{public: int _a;};class B : public A{publ原创 2017-07-25 22:52:17 · 320 阅读 · 0 评论 -
C++智能指针
智能指针是用模板实现,创建对象后,对象管理了资源,然后通过析构函数释放掉该资源,以防内存泄漏。auto_ptr(空间管理权限的转移,永远只有一个指针指向动态开辟的空间)#include <iostream>using namespace std;template<class T>class AutoPtr{public: AutoPtr(T* p = NULL) :_原创 2017-08-17 18:16:39 · 228 阅读 · 0 评论 -
只能在堆或栈上创建对象
只能在堆上创建对象只能在栈上创建对象类不能继承转载 2017-08-17 11:34:50 · 239 阅读 · 0 评论 -
C++ String的增删查改
#define _CRT_SECURE_NO_WARNINGS 1#include using namespace std;class String{public: String(char* str = "") :_str(new char[strlen(str)+1]) ,_size(strlen(str)) ,_capacity(strlen(str)) { s原创 2017-07-14 23:45:13 · 426 阅读 · 0 评论 -
可变参数列表
可变参数列表源码typedef char* va_list;#define __INTSIZEOF(n) ((sizeof(n) + sizeof(int) - 1) &~ (sizeof(int) - 1))#define va_start(ap, v) (ap = (va_list)&v + _INTSIZEOF(v))#define va_arg(ag,t)原创 2017-06-14 10:01:25 · 236 阅读 · 0 评论 -
通讯录第一版
#pragma once#include #include #define MAX 20#define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 11#define ADDR_MAX 30typedef struct Info{ char name[NAME_MAX]; int age; char sex[SEX_MA原创 2017-05-23 19:19:40 · 347 阅读 · 0 评论 -
通讯录第二版
#pragma once#include #include #include #include #define DEFAULT_SZ 10#define DEFAULT_INCREMENT 10#define LENGTH#define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 11#define ADDR_MAX 30原创 2017-05-23 19:20:59 · 323 阅读 · 0 评论 -
指针和数组
指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身 决定。它是“储存指针的数组”的简称。int *p1[10];“[]”的优先级比“*”要高。p1 先与“[]”结合,构成一个数组的定义,数组名为 p1,int* 修饰的是数组的内容,即数组的每个元素。数组指针:首先它是一个指针,它指向一个数组。在 32 位系统下永远是占 4 个字节, 至于原创 2017-05-09 22:58:03 · 334 阅读 · 0 评论 -
C/C++ EOF文件结束标记总结
getchar()和EOF总结大师级经典的著作,要字斟句酌的去读,去理解。以前在看K&R的The C Programming Language(SecondEdition)第1.5节的字符输入/输出,被getchar()和EOF所迷惑了。可能主要还是由于没有搞清楚getchar()的工作原理和EOF的用法。因此,感觉很有必要总结一下,不然,很多琐碎的知识点长时间过后就会淡忘的,只有写下转载 2017-05-26 17:20:46 · 2272 阅读 · 0 评论 -
三子棋
#define _CRT_SECURE_NO_WARNINGS 1# include# include# include#define ROW 3#define COL 3void menu()//开始提示{ printf("###1.开始游戏,0.退出系统###");}void display_board(char arr[ROW][COL], int row, int原创 2017-04-09 11:02:09 · 520 阅读 · 0 评论 -
c语言中的操作符总结
算数操作符: + - * / %1. 对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。2. %操作符的两个操作数必须为整数。返回的是整除之后的余数。移位操作符:>> 右移操作符左移操作符 移位规则:左边抛弃、右边补0。右移操作符 移位规则:1. 算术移位 :左边用0填充,右边丢弃 2. 逻辑移位:左边原创 2017-03-26 13:18:23 · 419 阅读 · 0 评论 -
c注释风格转化到c++注释风格
#pragma once#include #include typedef enum Convert_State//定义状态{ NULL_STATE, C_STATE, CPP_STATE, END_STATE}StateType;void CommentConvert();void DoConvertWork(FILE *read, FILE *write);voi原创 2017-05-30 17:21:51 · 410 阅读 · 0 评论 -
通讯录第三版
#pragma once#include #include #include #include #include #define DEFAULT_SZ 10#define DEFAULT_INCREMENT 10#define LENGTH#define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 11#define A原创 2017-05-23 19:22:43 · 435 阅读 · 0 评论 -
字符操作函数的模拟实现
实现strcpychar *my_strcpy(char *dest, const char *src){ char *ret = dest; assert(dest != NULL); assert(src != NULL); while(*dest++ = *src++) { ; } return ret;}实现strcatchar *my_strcat(ch原创 2017-06-14 09:44:54 · 263 阅读 · 0 评论 -
c++入门基础知识
命名空间:namespace,即名字空间,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。使用“using namespace”可以使得后面不需要每次指定名字空间1)名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关键字“namespace”,使用名字空间时用符号“::”指定。2)不指定名字空间的变量原创 2017-06-21 10:41:57 · 282 阅读 · 0 评论 -
C++ 日期计算器
#define _CRT_SECURE_NO_WARNINGS 1#include using namespace std;class Date{public: Date(int year = 1900,int month = 1, int day = 1) :_year(year) ,_month(month) ,_day(day) {} //拷贝构造系统默认生成原创 2017-07-02 07:07:35 · 667 阅读 · 0 评论 -
C++ Complex复数类
#define _CRT_SECURE_NO_WARNINGS 1#include using namespace std;class Complex{public: Complex(double real = 0, double image = 0) :_real(real) ,_image(image) {} Complex(const Complex& d)原创 2017-07-01 07:14:02 · 562 阅读 · 0 评论 -
单链表(c语言实现)
List.h#pragma once#include #include #include typedef int DataType;typedef struct ListNode{ DataType data; struct ListNode *next;}ListNode;void PrintList(ListNode *pList);//从头到尾打印void P原创 2017-06-09 13:11:03 · 433 阅读 · 0 评论 -
C语言实现单链表面试题--进阶
判断单链表是否带环?若带环,求环的入口点ListNode* judge_band(ListNode *pList)//判断单链表是否带环?若带环,求环的入口点?{ ListNode *fast = pList; ListNode *slow = pList; while((fast->next != NULL) && (fast->next->next != NULL)) {原创 2017-06-16 20:54:39 · 365 阅读 · 0 评论 -
扫雷
game.h#ifndef __GAME_H__#define __GAME_H__#include #include #include #include #define ROWS 11#define COLS 11#define ROW (ROWS-2)#define COL (COLS-2) #define MAX 10//void game();//设计原创 2017-04-27 11:48:48 · 533 阅读 · 0 评论 -
顺序表(动态)
SeqList.h#pragma once#include #include #include #include #define DEFAULT_SZ 10#define DEFAULT_INC 10typedef int DataType;typedef struct SeqList{ DataType *pData;//指向数据的存储位置 int sz;//有原创 2017-05-31 13:15:13 · 286 阅读 · 0 评论 -
顺序表(静态)
SeqList.h#pragma once#include #include #include #define MAX 100typedef int DataType;typedef struct SeqList{ DataType Data[MAX]; int sz;}SeqList, *pSeqList;void InitSeqList(pSeqList原创 2017-05-31 13:09:03 · 274 阅读 · 0 评论