Loading

C++ 学习笔记

 

文章目录

C\C++ 学习笔记

VS

解决VS控制台窗口自动关闭的问题

解决VS控制台窗口自动关闭的问题

在代码结束或返回前加一句话:
system("pause");
需要头文件:#include<stdlib.h>

VS 快捷键

  1. F5 : 继续运行,如果后面有断点则在断点处停止
  2. F9 : 在光标所在行增加一个断点
  3. 逐过程 F10,逐语句执行 F11,会进入函数内部 ,shift + F11 跳出函数内部
  4. Ctrl+F10 : 运行至光标处
  5. 注释选中行Ctrl+K,C 或Ctrl+E,C , 取消注释行Ctrl+K,U 或者Ctrl+E,U
  6. 转到定义 F12
  7. 删除当前行 Ctrl+Shift+L , Ctrl + L
  8. 折叠到定义 Ctrl+M,O
  9. 全变为大写:Ctrl+Shift+U 全变为小写Ctrl+U
  10. 查看方法参数信息Ctrl+Shift+空格
  11. 转到行号 Ctrl+G
  12. 全屏切换Shift+Alt+Enter,向后导航Ctrl±,向前导航Ctrl+Shift±

  • VS2010,VS2012,VS2015等的自动提示不能默认选中的功能解决办法

只需要按 ctrl+alt+space 即可切换。

C 中数组作为函数的参数和返回值

void myFunction(int *param){}
void myFunction(int param[10])
void myFunction(int param[])
  • 作为返回值

C语言编程不允许返回整个数组作为参数传递给函数,一般让函数返回数组的指针或引用实现.

 int *relation(int* refer_arry,int* signal_arry,int L,int M)
 {
     int i;//refer_arry->i
     //int j=0;//signal-arry->j
     int k;//result->k
     int result[10]={0};
         for(k=0;k<L;k++)
         {
             for(i=0;i<L;i++)
             {
                 result[k]=result[k]+refer_arry[i]*signal_arry[i-k+L-1];
             }
         }
         return result;
 }

 

指针

  • 指针是存放内存地址的变量

字符串

/*
例如,提示及用户输入如下:
请输入数据, 以空格分开:  12  15  98  (回车)

注:用户输入时中间可能是一个空格,也可能是多个空格,不影响结果。

input: 输入的字符串
numbers: 输出参数,存放解析出来的数,此缓冲区要求足够大
返回值: 解析出来的个数
 1 int  parse(const char*  input,   int numbers[] );
 2 */
 3 int  parse(const char*  input,   int numbers[] )
 4 {
 5     int start = 0;
 6     int end = 0;
 7     int flag = 0;//0 為空格
 8     int count = 0;
 9     for (int i = 0; ; i++)
10     {
11         char ch = input[i];
12         if (ch != ' ' && ch != 0)
13         {
14             if (flag == 0)
15             {
16                 start = i;
17                 flag = 1;
18             }
19         }else
20         {
21             if (flag == 1)
22             {
23                 end = i;
24                 flag = 0;
25 
26                 // 得到一个区间 end - start
27                 char buf[128] = {0};
28                 //char buf[128];
29                 int len = end - start;
30                 //从 input + start 的位置开始 复制 len 个字符到 buf
31                 memcpy(buf,input + start ,len);
32                 int num = atoi(buf);
33                 numbers[count++] = num;
34             }
35             
36         }
37         if (ch == 0 ) break;
38     }
39     return count;
40 }
View Code

 

1, 字符串的遍历兩种方式:数组和指针
2, 字符串的复制注意区别浅拷贝和深拷贝
这是浅拷贝,兩个指针指向同一块内存是不合理的

1 char* p1 = "hello world";
2 char* p2 = p1;

 

3, 字符串的比较 strcmp函数
4, 字符串的长度 strlen
5, 字符串的插入和删除都是效率低下的还不如直接复制一份新的
6, 学习 string.h 里面的字符串相关操作函数
7, sprintf 格式化字符串函数

 sprintf(dst, "%d/%d/%d", year, month, day); 

标准C 函数库学习

  • 取得当前时间,将当前时间转化为年月日
1     time_t start = time(NULL);//这是一个秒值,不是毫秒值
2     tm info = *localtime(&start);
3     printf("%4d-%02d-%02d  %02d:%02d:%02d \n",info.tm_year + 1900,info.tm_mon + 1,
4         info.tm_mday,info.tm_hour,info.tm_min,info.tm_sec);

 

打开浏览器 system("explorer http://afanihao.cn");

  • c++中用cout需要添加的头文件
#include   <iostream>   
using   namespace   std;

继承

  • C++ 中支持多继承,但是这个设计存在缺陷,如果继承的兩个父类中有相同的成员时会出现冲突
  • 所谓的纯虚函数纯虚类即java中的抽象函数,抽象类
  • 所谓虚拟继承即java中所说的父类引用指向子类对象
  • 虚函数 : 当父类与子类中皆存在相同的方法时(这其实就是多态),如同让P调用的是子类中的test呢?

将父类中的函数声明为virtual

 1 class Base 
 2 {
 3 public :
 4     virtual void Test()
 5     {
 6         printf("我是父類");
 7     }
 8 };
 9 class Child : public Base
10 {
11 public :
12     void Test()
13     {
14         printf("我是子類");
15     }
16 };
17 Base* p = new Child;
18 p->Test();
View Code

 

拷贝构造函数

  • 通常情况下不需要我们自己添加拷贝构造函数,默认的拷贝构造函数一般是够用的.

extern 与 static 如何声明与定义全局函数与全局变量

模板

模板就是java中的泛型

vector

size : 实际長度
capacity : 容量

其它

输出字符 :  printf("%c", a); 
打印数组 :

char buf[33];
printf("%s \n", buf);

http://www.cnblogs.com/iBinary/
在这里重点提一下unknowncheats, 简称UC. 这是一个关于外挂、逆向等技术的论坛,类似国内的看雪,

VS 快捷键

  1. 向上插入空行 : Ctrl + enter
  2. 向下插入空行 :Ctrl + shift + enter
  3. 快速复制当前行到下一行 :Ctrl + c + v
  4. 全屏化编辑窗口 : Alt + shift + enter

输入输出

  • 在控制台输入字符串并打印出来
char arr[128];
gets_s(arr);
printf("%s", arr);

%c 打印单个字符
$s 打印字符串
%d 打印整型
%f,%lf 打印小数和长小数
指定小数点后的位数
%.2f 以小数点后的位数为两位打印

字符串替换

/*
完成函数:
int replace( char* src,  const char*  subtext,   const char* newtext);
完成对源字符串src中子串的替换,将subtext出现的地方替换为 newtext

例如,
src:   "  just  do it .  never give up. "
subtext:  "just"
newtext:  "some"

注:源字符串中该子串可能出现多次,需依次替换。
*/
void strReplace1(char* strSrc, char* strFind, char* strReplace)
{
    if (strSrc == NULL || strFind == NULL || strReplace == NULL)
        return;

    char *replace = strReplace;
    char *find = strFind;
    while (*strSrc != '\0')
    {
        if (*strSrc == *strFind)
        {
            char *begin = strSrc;
            while (*strSrc != '\0' &&*strFind != '\0' && (*strSrc++ == *strFind++));
            if (*strFind == '\0')//查找到strFind字串
            {
                while (*strReplace != '\0' && (*begin++ = *strReplace++));
                strReplace = replace;
            }
            strFind = find;//指针归位
        }
        else
            strSrc++;
    }
}

int main() {
    char strSrc[] = "RSTDEFGRSTKLMNOPQRSTUVWRS";
    char strFind[] = "RST";
    char strReplace[] = "ggg";
    strReplace1(strSrc, strFind, strReplace);
    printf_s("%s \n", strSrc);
    system("pause");
    return 0;
}
  • 使用printf不报警告不报错的方法 : #define _CRT_SECURE_NO_WARNINGS

C++中的类

C++ 中方法名的首字母是大写的,之后每个单词的首字母也是大写

C++中的访问修问修饰符:

public : 可读可写
private : 不可读不可写
protected :
如何实现成员变更的只读或只写呢?
只设置getter 或只设置setter

C++ 中可以把函数定义在类的外面,甚至不是在同一个cpp文件里面,但是要在类里面先声明这个函数.在类的外面定义时要加下类名限定符

const可以放在函数的后面也可以放在函数的前面

void Test() const{}
const void getName(){}

构造函数与析构函数

  • C++中的对象只有被初始化才能被称为真正意义上的对象.
  • 重载 : 函数名相同,参数列表不同

  • 重写 : 函数名相同,参数列表也相同

  • 析构函数

  1. 析构函数从不在函数中显式的调用
  2. 以~ 开头,和类名相同,没有返回值
  • 默认构造函数
  1. 构造函数无参数或所有的参数都有默认值
  2. 没有默认构造函数创建数组时会报错
  • 有两种对成员变量时行初始化的方法
  1. 我们常用的方式
  2. 使用初始化列表,在构造函数的小括号后面,大括号前面,加上一段由 冒号引导,用逗号隔开的初始化列表.
class Circle
{
public:
    Circle():x(0), y(0), radius(1)
    {
    }
private:
    int x;
    int y;
    int radius;
};

 

继承

权限修饰符

public : 可以被外部访问,可以被子类继承
private : 不可以被外部访问,不可以被子类继承
protect : 不可以被外部访问,可以被子类继承

 

posted @ 2018-10-20 10:23  Hoonick  阅读(268)  评论(0)    收藏  举报