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 }

         

原文地址:https://www.cnblogs.com/xiaodangxiansheng/p/12559604.html