2018/03/01 模板 下面是一个针对int的冒泡排序
// _20180301.cpp : Defines the entry point for the console application. // #include "stdafx.h" void Sort(int* arr,int nLength) { int i,k; for (i = 0;ix > base.x && this->y > base.y; } private: int x; int y; }; template void Sort(T* arr,int nLength) { int i,k; for (i = 0;iy) return …
2018/02/23 深浅拷贝 相同类型间可以直接拷贝
// _20180212.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include class A { private: int* a; public: A() { a = new int[10]; } virtual ~A() { delete a; printf("析构 A \n"); } }; int main(int argc,char* argv[]) { A a1; A a2; a1 = a2; return …
2018/02/16 多态的实现原理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 #include "stdafx.h" #include #include class A { public: int x; virtual void Test() { …
2018/02/10 继承 子类从父类继承成员变量 子类从父类继承成员函数 #include "stdafx.h" class Person { public: int Age; int Sex; void Word() { printf("Person:Work"); } }; class Teacher:public Person { public: int Level; }; int main() { Teacher t; t.Age = -1; //合法但是不合理 t.Sex = 2; t.Level = 3; return 0; } 实现数据隐藏 为什么要隐藏数据成员
与前面比较,赋值的时候 合理不合法, …
2018/01/30 我们可以在什么地方创建对象? 全局变量区
Person p;
栈
void Max() { Person p; }
堆 new 和 delete
//在堆中创建对象: Person* p = new Person(); //释放对象占用的内存 delete p;
在堆中创建对象: new``delete 在C语言中我们使用malloc申请堆空间
使用完毕后使用free释放空间
C++:
class Person { private: int x; int y; public: Person() { printf("Person()执行了! \n"); } Person(int x,int y) …
2018/01/30 好的编程习惯 -定义和实现分开 代码会有更好的可读性 但不是必须的 在头文件中只留下声明代码
Test.h
struct sclass { int x; int y; int Bigger(int x,int y); int Max(int x,int y,int z); }; Test.cpp
int sclass::Bigger(int x,int y) { if(x>y) { return x; } else { return y; } } int sclass::Max(int x,int y,int z) { return Bigger(Bigger(x,y),z); } 使用: …
2018/01/28 什么是继承 struct Person { int age; int sex; }; struct Teacher { int age; int sex; int level; int classId; }; struct Teacher:Person { int level; int classId; }; 总结:
1、什么是继承?
继承就是数据的复制
2、为什么要用继承?
减少重复代码的编写
3、Person 称为父类或者基类
4、Teacher称为子类或者派生类
继承不仅仅局限于父类 struct X { int a; int b; }; struct Y:X { int c; int …
2018/01/28 什么是构造函数 #include "stdafx.h" #include struct Sclass { int a; int b; int c; int d; Sclass()//构造函数 { printf("观察这个函数 \n"); } Sclass(int a,int b,int c,int d)//构造函数 { this->a=a; this->b=b; this->c=c; this->d=d; printf("观察这个函数 2\n"); } int Plus() { return a+b+c+d; } }; int main(int argc, char* argv[]) { …
2018/01/27 什么是预处理 预处理一般是指在程序源代码被转换为二进制代码之前,由预处理器对程序源代码文本进行处理,处理后的结果再由编译器进一步编译。
预处理功能主要包括宏定义,文件包含,条件编译三部分
宏定义 简单宏: #define 标识符 字符序列 #define FALSE 0 #define NAME "LUODAOYI" #define __IN #define __OUT //极端例子 #define NAME "LUODAOYI" #define A int method() { #define B char buffer[0x10]; #define C …
2018/01/21 封装 C语言和C++语言的区别 C++是对C的补充扩展,C原有的语法C++都支持,并在此基础上扩展了一些新的语法:
继承、封装、多态、模板等等
结构体可以作为参数传递吗 struct Student { int a; int b; int c; int d; } //分析这个函数是如何传递参数的 int Plus(student s) { return s.a+s.b+s.c+s.d; } 23: Student s = {1,2,3,4}; 00401078 mov dword ptr [ebp-10h],1 0040107F mov dword ptr [ebp-0Ch],2 …
2018/01/20 函数调用约定 就是告诉编译器:怎么传递参数,怎么传递返回值,怎么平衡堆栈
int method(int x,int y) { return x+y; } //调用 method(1,2); 常见的几种调用约定: 调用约定 参数压栈顺序 平衡堆栈 __cdecl 从右至左入栈 调用者清理栈 __stdcall 从右至左入栈 自身清理堆栈 __fastcall ECX/EDX 传送前两个,剩下:从右至左入栈 自身清理堆栈 int __stdcall method(int x,int y) { return x+y; } //调用 method(1,2); //观察反汇编堆栈变化 PS:一般情况下自 …
2018/01/18 指针数组的定义 char arr[10]; //10 char char* arr[10]; //10 指针(char*) Point* arr[10]; //10 指针(Point*) int******** arr[10]; 指针数组的赋值 char* a = "Hello"; char* b = "World"; //方式1: char* arr[2]= {a,b}; //方式2: char* arr[2]; arr[0]=a; arr[1]=b; 结构体指针数组 struct Point { int x; int y; } Point p; //8字节 一个结构体 Point …
2018/01/17 探测结构体指针的特性 struct Point { int x; int y; } ++、– 加法与减法 指针相减 使用结构体指针 //创建结构体 Point p; p.x=10; p.y=20; //声明结构体指针 Point* ps; //为结构体指针赋值 ps = &p; //通过指针读取数据 printf("%d \n",ps->x); //通过指针修改数据 ps->y=100; printf("%d\n",ps=>y); 结构体指针一定要指向结构体吗? struct Point { int x; int y; } int arr[10]={1,2,3,4,5,6,7,8,9,10} …
2018/01/17 一级指针和多级指针 int i =100; int* p1 = &i; int** p2 = &p1; int*** p3 = &p2; int**** p4 = &p3; int***** p5 = &p4 int****** p6 = &p5; int******* p7 = &p6; int****** px1 = *(p7); int***** px2 = *(px1); int**** px3 = *(px2); int*** px4 = *(px3); int** px5 = *(px4); int* px6 = *(px5); int px7 = *(px6); int px7 …
2018/01/15 字符串的几种表示方式有什么区别? char str[6] = {"A","B","C","D","E","F"}; //"\0" 或者0 --堆栈中 局部变量 char str[] = "ABCDE"; //编译器末尾填0 常量区 char* str= "ABCDE"; //常量区 //打印 printf("%s \n",str); //字符串打印时 遇到 0 才会停止 常用的字符串函数 1、int strlen(char* s) 返回值是字符串S的长度,不包括结束符"/0" 弊端:字符串中英文混合的话。返回的长度有问题,因为中文占用两个字节 2、char* strcpy(char* …
2018/01/14 基本类型参数传递 int x =1; void plus(int p) { p = p+1; } printf("%d \n",x); //x的值是多少? 数组作为参数 编写一个函数,能够打印任意整形数组的值
void PrintArray(int arr[],int nLength) {
2018/01/12 “*”的几种用途 乘法运算符
int x = 1; int y = 2; int z = x * y;
定义新的类型
char x; char* x;
取值运算符
指针类型的变量 int* a =(int*)1; printf("%x \n",(a +1)); 10: int a =(int*)1; 00401028 mov dword ptr [ebp-4],1 11: printf("%x \n",*(a +1)); 0040102F mov eax,dword ptr [ebp-4] 00401032 mov ecx,dword ptr [eax+4] 00401035 push ecx …
2018/01/12 &符号是取地址符,任何变量都可以使用&来获取地址,但不能用在常量上
struct Point { int x; int y; }; char a; short b; int c; Point p; printf("%p %p %p %p \n",&a,&b,&c,&p); printf("%x %x %x %x \n",&a,&b,&c,&p); printf("%x \n",&10); 16: char a; 17: short b; 18: int c; 19: Point p; 20: 21: printf("%p %p %p %p \n",&a,&b,&c,&p); 0040D408 …
2018/01/07 分析结构体大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 struct S1 { char c1; double d; char c2; char c3; }; struct S2 { char c1; char c2; char c3; double d; }; struct S3 { char c1; S1 s; char c2; char c3; }; 分析结构体大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #pragma pack(1) struct S1 { char …
2018/01/07 结构体数组的定义 类型 变量名[常量表达式]; //定义结构体类型 struct stStudent { int Age; int Level; } //定义结构体变量 struct stStudent st; //定义结构体数组 struct stStudent arr[10]; //或者 stStudent arr[10]; 结构体数组初始化 struct stStudent{ int Age; int Level; }; struct stStudent arr[5] = {{0,0},{1,1},{2,2},{3,3},{4,4}}; //或者 arr[0].Age=100; …