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





浙公网安备 33010602011771号