C++Note 构造析构分类及调用

两种分类方式:

  按参数分为:有参构造和无参构造

  按类型分为:普通构造和拷贝构造

三种调用方式:

  括号法

  显示法

  隐式转换法

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 
 4 //构造函数的分类及调用
 5 //分类
 6 //按照参数分类  无参构造(默认构造)和有参构造
 7 //按照类型分类  普通构造和拷贝构造
 8 class Person
 9 {
10 public:
11     //构造函数
12     Person()
13     {
14         cout << "Person无参构造函数的调用" << endl;
15     }
16     Person(int a)
17     {
18         age = a;
19         cout << "Person有参构造函数的调用" << endl;
20     }
21     //拷贝构造函数
22     Person(const Person &p) // ***拷贝 Person p  但需要限制 加 const 为了表明数据传入进来后不会被改变 后用&p(如果直接用Person p 可能会导致无限递归调用栈溢出)***
23     {
24         //将传入的人p的属性拷贝到    我的身上
25         cout << "Person拷贝构造函数的调用" << endl;
26          age = p.age;
27     }
28     //析构函数
29     ~Person()
30     {
31         cout << "Person析构函数的调用" << endl;
32     }
33     int age;
34 };
35 //调用
36 void test01()
37 {
38     //Person p1;//默认构造函数调用
39     ////1.括号法
40     //Person p2(10);//有参构造函数
41     //Person p3(p2);//拷贝构造函数
42     
43     //***注意事项: 调用默认构造函数的时候 不要加()
44     //***Person p1();   错误   编译器认为这是一个函数声明 不会认为在创建对象
45     
46     //cout << "p2的年龄为: " << p2.age << endl;// 初始化写入10
47     //cout << "p3的年龄为: " << p3.age << endl;// 拷贝p2到p3 10
48   
49     //2.显示法
50     Person p1;// 默认:无参
51     Person p2 = Person(10);//有参
52     Person p3 = Person(p2);//拷贝 
53     //Person(10);// 匿名对象  特点:当前行执行结束后,系统会立即回收掉匿名对象
54     //***注意事项2:不要利用拷贝构造函数 初始化匿名对象
55     //***Person(p3);//错误:重定义 编译器会认为  Person(p3) == Person p3;
56 
57     //3.隐式转换法
58     Person p4 = 10;//等同于  Person p4 = Person(10);  有参构造
59     Person p5 = p4;//拷贝构造
60 }
61 int main() 
62 {
63     test01();
64     system("pause");
65     return 0;
66 }
复制代码

 如果允许复制构造函数传值,就会在复制构造函数内调用复制构造函数,就会形成永无休止的递归调用从而导致栈溢出。

复制代码
class A
{
private:
    int value;
public:
    A(int n){value = n;}
    A(A other){value = other.value;}//错误案例
void Print(){std::cout<<value<<std::endl;}
};
复制代码

 

posted on   廿陆  阅读(8)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示