|
沙发
楼主 |
发表于 2021-6-30 09:56:57
|
只看该作者
优化Teacher类, 属性变成 char *m_pname, 构造函数里面 分配内存
- #include <iostream>
- #include <string.h>
- #include "2_MyVector.cpp"
- using namespace std;
- //案例:数组模板类变容器,算法与数据类型分离 放 int char Teacher 的数组 都可以
- //1 优化Teacher类, 属性变成 char *m_pname, 构造函数里面 分配内存 析构释放内存
- //2 优化Teacher类,析构函数 释放panme指向的内存空间
- //3 优化Teacher类,避免浅拷贝 重载= 重写拷贝构造函数
- //4 优化Teacher类,在Teacher增加 << linux没有成功
- //5 在模板数组类中,存int char Teacher Teacher*(指针类型)
- //=====>stl 容器的概念 入门
- class Teacher{
- public:
- Teacher()
- {
- //error: no matching function for call to ‘Teacher::Teacher()’m_space = new T[m_len];
- //为什么要提供一个 默认构造函数?
- this->age = 0;
- this->m_pname = new char[1];
- strcpy(this->m_pname, "");
- cout << "Teacher的无参构造函数!" << endl;
- }
- Teacher(char *name, int age=8){
- this->age = age;
- this->m_pname = new char[strlen(name) + 1];
- strcpy(this->m_pname, name);
-
- }
- Teacher(const Teacher& obj){
- this->age = obj.age; //体会:.与->的区别 easy
-
- this->m_pname = new char[strlen(obj.m_pname) + 1];
- strcpy(this->m_pname, obj.m_pname);
-
- }
- ~Teacher()
- {
- //this->age = 0;
- if (m_pname != NULL){
- delete [] m_pname;
- m_pname = NULL;
- }
- cout << "Teacher类的 析构函数!" << endl;
- }
- public:
- Teacher& operator=(const Teacher& obj){
- if (m_pname != NULL){
- delete [] m_pname;
- m_pname = NULL;
- }
- age = obj.age;
- m_pname = new char[strlen(obj.m_pname) + 1];
- strcpy(m_pname, obj.m_pname);
- cout << "Teacher类的 =操作符重载!" << endl;
- return *this;
- }
- void printT()
- {
- cout << "名字=" <<m_pname << ", 年龄=" << age << endl;
- }
- private:
- int age;
- //char name[10]; //这种情况简单 直接分配栈内存空间 这是固定的空间
- char *m_pname; // 程序活起来 名字不用固定长度了 构造函数中动态分配内存空间
- };
- int main(){
- Teacher t1("t11111111111", 31),t2("t222222222222", 32),t3("t33333333", 33),t4("t44444444444", 34);
- //t1 = t2; //这个还不行
- //Teacher t5 = t3;
- //t1.printT();
- MyVector<Teacher> myv1(4);
- myv1[0] = t1;
- myv1[1] = t2;
- myv1[2] = t3;
- myv1[3] = t4;
- MyVector<Teacher> myv2(4);
- myv2 = myv1;
- for(int i=0;i<4;i++){
- myv2[i].printT();
- }
-
- cout << "我的容器类_Teacher复杂数据类型" << endl;
- return 0;
- }
复制代码 |
|