c++ (6)- new-delete-this

1.new 分配基础类型

【特别说明】

  • new和delete是属于c++中的操作符,不是函数;
  • 而c语言中的malloc和free 则是属于c语言中的函数;
  • new会自动调用构造函数;delete则会自动调用析构函数;

 2.new 分配数组

3.new 分配对象

 

 

 4.如果做一个buffer的分配

5.问题:使用new的内存可以使用free掉吗?使用malloc分配的内存空间可以使用delete掉吗?

 5.1 基础类型测试

【说明】使用断点调试,最后测试的结果是可以通过的,没有宕机;

5.2 数组类型测试

【说明】最后没有宕机

 5.3 对象测试

 5.4 结论

 

6.static静态成员变量

 

7.static静态成员函数

7.1 两种调用方法

【说明】有两种调用方法

7.2  静态成员函数是否可以调用静态成员变量?

【答】不可以;

 

8.类的模型初探

8.1 程序大小计算

 1 #include "iostream"
 2 using namespace std;
 3 class C1
 4 {
 5 public:
 6     int i; //4
 7     int j; //4
 8     int k; //4
 9 protected:
10 private:
11 }; //12
12 class C2
13 {
14 public:
15     int i;
16     int j;
17     int k;
18     static int m; //4
19 public:
20     int getK() const { return k; }  //4
21     void setK(int val) { k = val; } //4
22 protected:
23 private:
24 }; //24 16 12( 铁钉的不对 )
25 struct S1
26 {
27     int i;
28     int j;
29     int k;
30 }; //
31 struct S2
32 {
33     int i;
34     int j;
35     int k;
36     static int m;
37 }; //
38 int main()
39 {
40     printf("c1:%d \n", sizeof(C1));
41     printf("c2:%d \n", sizeof(C2));
42     printf("s1:%d \n", sizeof(S1));
43     printf("s2:%d \n", sizeof(S2));
44     system("pause");
45 }

【结论】

 8.2 结论

 

 

 

【说明】上图中的左侧是c++的程序,右侧的是c++编译之后翻译的程序;同样看出,翻译后的程序是面向过程的程序。c++的程序本质还是面向过程的程序。

 

 9.this指针

【说明】谁调用类,this指针就指向谁。

 10.const修饰成员函数

  •  实际的转化:在成员函数中c++编译器会默认添加“const”修饰this指针;
  • this指针无法被修改;

 

11. 全局函数转变为成员函数

11.1 全局函数的方法

 11.2 成员函数的方法

 

 

 

11.3 返回引用与返回元素

 

 

业务逻辑:

 

12. 强化练习:数组类的封装

 12.1 业务逻辑

目标:解决实际问题,训练构造函数、 copy 构造函数等,为操作符重载做准备

 1 #include "iostream"
 2 #include "Array.h"
 3 using namespace std;
 4 int main()
 5 {
 6     Array a1(10);
 7     for (int i = 0; i < a1.length(); i++)
 8     {
 9         a1.setData(i, i);  //【功能1】成员函数:设置数组元素
10     }
11     for (int i = 0; i < a1.length(); i++)
12     {
13         printf("array %d: %d\n", i, a1.getData(i));
14     }
15     Array a2 = a1;
16     for (int i = 0; i < a2.length(); i++)
17     {
18         printf("array %d: %d\n", i, a2.getData(i));  //【功能2】成员函数:获取数组元素
19     }
20     system("pause");
21     return 0;
22 }

 头文件:

 1 #ifndef _MYARRAY_H_
 2 #define _MYARRAY_H_
 3 class Array
 4 {
 5 private:
 6     int mLength;
 7     int *mSpace;
 8 
 9 public:
10     Array(int length);
11     Array(const Array &obj);
12     int length();
13     void setData(int index, int value);
14     int getData(int index);
15     ~Array();
16 };
17 #endif

 

 

 

 

posted @ 2021-02-16 16:37  OzTaking  阅读(79)  评论(0)    收藏  举报