今天来继续了解类和对象!
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);
}