• C++ 小甲鱼视频总结


    第一讲:C++语言面向对象的的特性:封装,抽象,继承,多态。

    第四讲:读取文件的类ifstream,写入文件的类ofstream,都是来自一个头文件fstream。

        常见的几种打开模式:

        ios::in --打开一个可读文件

        ios::out --打开一个可写入文件

        ios::binary -- 以二进制的形式打开一个文件

        ios::app --写入的所有数据将被追加到文件的末尾

        ios:: trunk --删除文件原来已存在的内容

    第六讲:方法(函数)的重载只是对参数的不同来区别不同的方法,对于返回值的不同是方法的覆盖。

    第七讲:对于string对象的一些常用的方法:

        截取字符串:substr();

        比较字符串:compare();

        添加字符串:insert();

        替换字符串:replace();

        搜索字符串:find();

    第八讲:数据的地址在内存中存储时是对齐的,操作系统是32位就以4k的方式对齐,64位的就是以8k的方式对齐。比如int型的地址存放在0123的位置,然后定义了char的存放到45的位置(内存中字符是以ASCII形式存放),在定义一个int型的则存放到9 10 11 12的位置,为了cup更方便运算。定义的指针变量必须和变量的类型一样。

    第九讲:在指针中*有两个作用:1、用于创建指针变量,并不是解引用的意思  int *temp; 2、用于解引用  *temp。 void *temp2;空指针就是没有被申明的指针。

    第十一讲:

    1 //结构
    2 struct  studdnt
    3 [
    4   string name;
    5   char sex;
    6   int age;    //定义不同的数据类型
    7 }

    第十三讲:对于联合(union)和结构差不多,区别是联合一个对象只能赋一个变量的值。对于枚举(enum)我们通常可以用到swich中

     1 int main()
     2 {
     3     enum student
     4     {
     5         xiaodang, xiaokai, xiaowen   //这里的xiaodang相当于0
     6     };
     7     student std;
     8     std = xiaokai; //这里的std相当于1
     9     switch (std)
    10     {
    11     case xiaodang: cout << "找到小党了"; break;
    12     case xiaokai: cout << "找到小开了"; break;
    13     case xiaowen: cout << "找到小文了"; break;
    14     default: cout << "什么都没有找到"; break;
    15     }
    16     return 0;
    17 }

     第二十四讲:虚方法(virtual)

     1 class Pet
     2 {
     3 public:
     4     virtual void play();      //父类定义为虚方法,否则输出的就是000,现在输出的是子类的方法
     5 };
     6 void Pet::play()
     7 {
     8     std::cout << " oooo " << std::endl;
     9 }
    10 
    11 class Dog:public Pet
    12 {
    13 public:
    14     Dog(std::string dogName);
    15     ~Dog() {};
    16      void play();
    17 private:
    18     std::string dname;
    19 
    20 };
    21 Dog::Dog(std::string dogName)
    22 {
    23     dname = dogName;
    24 }
    25 void Dog::play()
    26 {
    27     std::cout << dname << "is play bot" << std::endl;
    28 }
    29 
    30 
    31 class Cat :public Pet
    32 {
    33 public:
    34     Cat(std::string catName);
    35     ~Cat() {};
    36     void play();
    37 private:
    38     std::string cname;
    39 
    40 };
    41 Cat::Cat(std::string catName)
    42 {
    43     cname = catName;
    44 }
    45 void Cat::play()
    46 {
    47     std::cout << cname << "is play dd" << std::endl;
    48 }
    49 int main()
    50 {
    51     Pet *pot1 = new Dog("dahuang");
    52     Pet *pot2 = new Cat("xuexue");
    53     pot1->play();
    54     pot2->play();
    55     return 0;
    56 }

    第二十五讲:抽象方法(abstract)

    当这个方法是必不可少时,但是又不想在基类里面实现时,我们就可以用抽象方法。那只需要在我们上面的例子中,在基类的play虚方法后面加上一个“=0”而不用实现,就可以了,这样我们就告诉编译器,不需要去基类里面寻找这个方法的实现。 

    第二十九讲:对于多继承

    1 class Person
    2 {};
    3 
    4 class Anmial
    5 {};
    6 
    7 class Teacher:public Person,public Anmial  //多继承
    8 {};

     第三十四讲:关于动态内存管理:当我们new一个对象时,这个对象是存储在堆上的,不会自动清理,需要我们使用delete来清理我们申请的内存,同时把指针赋值位NULL。而我们不用new创建一个对象时,这个对象的生命周期只存在于这个函数的结束。系统会自动清理。

     1 class Person
     2 {
     3 public:
     4     Person(std::string name);
     5     virtual void play();     //这里定义虚函数,为了在子类方法覆盖时,调用不到子类的方法
     6 
     7 protected:
     8     std::string pName;
     9 };
    10 Person::Person(std::string name)
    11 {
    12     this->pName = name;
    13 }
    14 void Person::play()
    15 {
    16     std::cout << pName << "play games" << std::endl;
    17 }
    18 
    19 class Anmial : public Person
    20 {
    21 public:
    22     Anmial(std::string thename,std::string thegame);
    23     void play();
    24 protected:
    25     std::string Agame;
    26 };
    27 Anmial::Anmial(std::string thename, std::string thegame):Person(thename)  //继承父类的构造函数时,参数应该一致
    28 {
    29     this->Agame = thegame;            //这里当我们的类和父类的变量名一致时,我们可以用this指针来区分,像这里可以不用this
    30 }
    31 void Anmial::play()
    32 {
    33     std::cout << pName << " like play " << Agame << std::endl;
    34 }
    35 
    36 int main()
    37 {
    38     Person *Prn = new Anmial("xiaohua", "cod16");   //使用new创建一个对象
    39     Prn->play();
    40     delete Prn;     //清理堆里内存
    41     Prn = NULL;    //指针清空
    42 
    43     return 0;
    44 }

    第三十五讲:关于动态数组  

     1 int main()
     2 {
     3     int count;
     4     std::cout << "输入整数" << std::endl;
     5     std::cin >> count;
     6 
     7     int *temp = new int [count];    //定义动态数组
     8     for (int i = 0; i < count; i++)
     9     {
    10         temp[i] = i + 1;
    11         std::cout <<""<<i<< "个数字尸"<< temp[i] << std::endl;
    12     }
    13 
    14     delete[]temp;   //释放内存
    15     return 0;
    16 }

     第三十八讲:强制转换

     1 int main()
     2 {
     3     Company *cop = new Company("APPLE", "Iphone");
     4     TecCompany *Tcop = dynamic_cast<TecCompany*>(cop);//这里如果dynamic_cast<TecCompany*>(cop)转换没有成功,则得到的结果为NULL
     5     if (Tcop == NULL)                                //当然我们也是可以用(TecCompany*)cop直接转换的,但是这样会存在风险
     6     {
     7         cout << "内存为空" << endl;
     8         return 0;
     9     }
    10     Tcop->start();
    11 
    12     delete Tcop;
    13     cop = NULL;
    14     Tcop = NULL;
    15     return 0;
    16 }

    第四十五讲:模板

    函数模板

    1 template<class T>  //其中class并不是类的意思,而是我们约定俗称的
    2 void foo(T a)            //T代表了不确定的类型
    3 {
    4     //do something
    5 }

    调用的时候可以直接像普通函数那样调用,也可以写成  foo<int>(a); 

    类模板

    1 template<class T>
    2 class Student
    3 {
    4     student();
    5     void foo(T &a, T &b);
    6 };

    举个例子:

     1 template<class T>
     2 class Stack
     3 {
     4 public:
     5     Stack(int size = 100);  //如果不指定大小,则默认100
     6     ~Stack();
     7     void push(T value);
     8     T pop();
     9 
    10 protected:
    11     int size;
    12     T *date;         //定义一个指针
    13     int sp;
    14 
    15 };
    16 
    17 template<class T>
    18 Stack<T>::Stack(int size)  //注意泛型的类名的后面要增加一个T
    19 {
    20     this->size = size;
    21     date = new T[size];
    22     sp = 0;
    23 }
    24 
    25 template<class T>
    26 Stack<T>::~Stack()
    27 {
    28     delete[] date;    //释放指针指向的内存
    29 }
    30 
    31 template<class T>
    32 void Stack<T>::push(T value)
    33 {
    34     date[sp++] = value;
    35 }
    36 
    37 template<class T>
    38 T Stack<T>::pop()
    39 {
    40     return date[--sp];
    41 }
    42 int main()
    43 {
    44     Stack<int> sta;
    45     sta.push(1);
    46     sta.push(2);
    47     sta.push(3);
    48     cout << sta.pop() << endl;
    49     cout << sta.pop() << endl;
    50     cout << sta.pop() << endl;
    51     return 0;
    52 }

    当需要多个数据类型的时候我们只需要增加数据类型即可  template<class T,class U> ,实例化时我们只需要填入我们需要的类型即可 MyClass<int, double> mc; 

    第四十八讲:容器

    向量:vector,定义 vector<string> vct; 

     1 #include<vector>
     2 using namespace std;
     3 int main()
     4 {
     5     vector<string> vct;
     6     vct.push_back("HELLO ");
     7     vct.push_back("WORLD!");
     8     vector<string>::iterator iter = vct.begin();  //iterator是迭代器
     9 
    10     while (iter != vct.end())
    11     {
    12         cout << *iter << endl;       //输出hello world
    13         ++iter;
    14     }
    15     return 0;
    16 }

             

  • 相关阅读:
    php 爬虫采集
    深入浅出Java 23种设计模式,最全PDF版本终于开放下载了!!(文末有福利)
    【Nginx】如何格式化日志并推送到远程服务器?看完原来很简单!!
    【Nginx】如何为已安装的Nginx动态添加模块?看完我懂了!!
    【Nginx】如何配置Nginx日志?这是最全面的一篇了!!
    【Nginx】如何按日期分割Nginx日志?看这一篇就够了!!
    【Nginx】如何封禁IP和IP段?看完这篇我会了!!
    【Nginx】面试官竟然问我Nginx如何生成缩略图,还好我看了这篇文章!!
    【Nginx】实现负载均衡、限流、缓存、黑白名单和灰度发布,这是最全的一篇了!
    【Nginx】如何获取客户端真实IP、域名、协议、端口?看这一篇就够了!
  • 原文地址:https://www.cnblogs.com/xiaodangxiansheng/p/12559604.html
Copyright © 2020-2023  润新知