今天来继续了解类和对象!
PS.本博客参考b站up黑马程序员的相关课程,老师讲得非常非常好!
封装
深拷贝与浅拷贝
浅拷贝:简单的赋值拷贝操作
深拷贝:在堆区重新申请空间,进行拷贝操作
首先,这是一个普通的构造函数代码:
#include<iostream>
using namespace std;class Person
{public:int m_Age;//int *m_Height;Person(){cout<<"Person的默认构造函数调用"<<endl; }Person(int age){m_Age=age;cout<<"Person的有参构造函数调用"<<endl; }~Person(){cout<<"Person的xigou函数调用"<<endl; }
};void test01()
{Person p1(18)cout<<"p1的年龄为:"<<p1.m_Age<<endl;Person p2(p1);cout<<"p2的年龄为:"<<p2.m_Age<<endl;
}int main()
{test01();return 0;
}
new:
new,是C++提供的用于动态申请存储空间的运算符。
new的使用
new+数据类型(初值),返回值为申请空间的对应数据类型的地址。
1.使用new申请一个对象
int *p = new int(10);//申请了一个初值为10的整型数据
2.使用new申请数组
int *arr = new int[10];//申请了能存放10个整型数据元素的数组,其首地址为arr
delete运算符的使用
new运算符通常搭配delete元素安抚来使用,new用来动态申请存储空间,delete用于释放new申请的空间。
语法格式如下:
delete p;
delete[] arr;//注意要删除数组时,需要加[],以表示arr为数组。
对这个代码进行一些处理:
#include<iostream>
using namespace std;class Person
{public:int m_Age;int *m_Height;Person(){cout<<"Person的默认构造函数调用"<<endl; }Person(int age,int height){m_Age=age;m_Height=new int(height);cout<<"Person的有参构造函数调用"<<endl; }~Person(){//将堆区开辟的数据释放 if(m_Height!=NULL){delete m_Height;m_Height=NULL}cout<<"Person的析构函数调用"<<endl; }
};void test01()
{Person p1(18,160);cout<<"p1的年龄为:"<<p1.m_Age<<"身高:"<<<<endl;Person p2(p1);cout<<"p2的年龄为:"<<p2.m_Age<<endl;
}int main()
{test01();return 0;
}
会报错:
解决方法:使用深拷贝解决
Person(const Person &p){m_Age=p.m_Age;//深拷贝操作m_Height=new int(*p.m_Height);}