zoukankan      html  css  js  c++  java
  • C++ 学习笔记

    文章目录

    CC++ 学习笔记

    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 
    ",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 
    ", 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 != '')
        {
            if (*strSrc == *strFind)
            {
                char *begin = strSrc;
                while (*strSrc != '' &&*strFind != '' && (*strSrc++ == *strFind++));
                if (*strFind == '')//查找到strFind字串
                {
                    while (*strReplace != '' && (*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 
    ", 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 : 不可以被外部访问,可以被子类继承

  • 相关阅读:
    对于进程的理解
    反汇编引擎实现——流程分析
    window异常处理——except_handler4以及栈展开分析
    对于硬盘驱动的理解
    对文件系统的理解
    移动端适配flexible.js
    vue学习(5)-评论功能(利用父组件的方法)
    vue学习(4)-组件的创建,父子组件传值,$refs
    vue学习(3)-增删改查
    vue学习(2)-过滤器
  • 原文地址:https://www.cnblogs.com/hoonick/p/9820784.html
Copyright © 2011-2022 走看看