0
点赞
收藏
分享

微信扫一扫

c++学习 2.13

王小沫 2022-02-13 阅读 64

1、拷贝构造函数

注意拷贝构造函数形参参数的写法

Person(const Person &p){    cout<<"Person拷贝构造函数调用"<<endl;}

2、构造函数使用规则

如果写了有参构造函数,编译器不再提供默认构造。(自己写的高级构造函数会屏蔽编译器提供的低级构造函数)

3、深拷贝和浅拷贝

浅拷贝:简单的赋值拷贝操作

深拷贝:在堆区重新申请空间,进行拷贝操作(需要手动释放,delete)

#include<iostream>using namespace std;class Person{public:Person(){cout << "Person默认构造函数调用" << endl;}Person(int age, int height){m_Age = age;m_Height = new int(height);//在堆区创建一个值为height的变量,需要在析构函数中手动释放}~Person(){if (m_Height != NULL){delete m_Height;m_Height = NULL;}cout << "Person析构函数调用" << endl;}Person(const Person& p){m_Age = p.m_Age;//m_Height=p.m_Height;//浅拷贝,编译器实现的代码m_Height = new int(*p.m_Height);//深拷贝,在堆区创建一个内存存储变量cout << "Person拷贝构造函数调用" << endl;}int m_Age;int* m_Height;//堆区变量,需要手动释放};void test01(){Person p1(18, 170);Person p2(p1);cout << "p1的年龄:" << p1.m_Age << " 身高:" << *p1.m_Height << endl;cout << "p2的年龄:" << p2.m_Age << " 身高:" << *p2.m_Height << endl;}int main(){test01();system("pause");}

4、初始化列表

作用: c++提供了初始化列表语法,用来初始化属性

语法:构造函数():属性1(值1),属性2(值2)...{}

class Person{public://传统初始化Person(int a, int b, int c){m_A = a;m_B = b;m_C = c;}//初始化列表初始化属性Person(int a,int b,int c) :m_A(a), m_B(b), m_C(c){//更简化}int m_A;int m_B;int m_C;};

 

 

举报

相关推荐

0 条评论