构造函数的调用(其中不包括赋值构造函数)

 1 #include<iostream>
 2
 3 using namespace std;
 4 //解析和析构函数的调用
 5 class Test
 6 {
 7 public:
 8     Test()
 9     {
10         cout<<"我是无参的构造函数\n\n";
11     }
12     Test (int i)
13     {
14         t_a=i;
15         cout<<"i= "<<i<<endl;
16         cout<<"哎呀,人家是形参为1的构造函数、\n\n";
17     }
18     Test (int a,int b)
19     {
20         cout<<"a= "<<a<<" b= "<<a<<endl;
21         cout<<"我是两个参数的构造函数、\n\n";
22     }
23     Test(const Test &obj)
24     {
25         cout<<"我是赋值构造函数又叫拷贝构造函数\n\n";
26     }
27     ~Test()
28
29     {
30         cout<<"我是析构函数\n\n";
31     }
32
33 private:
34     int t_a;
35     int t_b;
36 protected:
37 };
38 int main()
39 {
40     cout<<"Test t1  ====>";
41     Test t1;//无参函数的赋值
42     cout<<endl;
43     cout<<"Test t2(1,3) =========>";
44     Test t2(1,3);//两个形参的函数调用
45     cout<<endl;
46
47     cout<<"Test t3=(1,3)========>";
48     Test t3=(1,3);//一个形参的调用
49     cout<<endl;
50     cout<<"Test t4=3========>";
51     Test t4=3;//一个形参的调用
52     cout<<endl;
53     cout<<"Test t5(3)========>";
54     Test t5(3);//一个形参的调用
55     cout<<endl;
56
57     cout<<"Test t6=Test(1)========>";
58     Test t6=Test(1);//匿名对象,这个较为特殊,右边括号内几个值就调用几个形参的函数。
59     cout<<endl;
60
61     cout<<"Test t7=Test(1,3)========>";
62     Test t7=Test(1,3);//匿名对象,这个较为特殊,右边括号内几个值就调用几个形参的函数。
63     cout<<endl;
64
65
66     cout<<" hello world \n";
67     system("pause");
68 }

时间: 2024-10-15 06:57:06

构造函数的调用(其中不包括赋值构造函数)的相关文章

C++ 为什么拷贝构造函数参数必须为引用?赋值构造函数参数也必须为引用吗?

之前写拷贝构造函数的时候,以为参数为引用,不为值传递,仅仅是为了减少一次内存拷贝.然而今天看到一篇文章发现自己对拷贝构造的参数理解有误. 参数为引用,不为值传递是为了防止拷贝构造函数的无限递归,最终导致栈溢出. 下面来看一个例子: class test { public: test() { cout << "constructor with argument\n"; } ~test() { } test(test& t) { cout << "

C++:派生类的默认构造函数和拷贝构造函数调用基类构造函数的机制(含程序验证)

1.如果基类定义了不带参数的默认构造函数,则编译器为派生类自动生成的默认构造函数会调用基类的默认构造函数. 2.如果基类定义了拷贝构造函数,则编译器为派生类自动生成的拷贝构造函数同样会调用基类的拷贝构造函数. 3.如果基类定义了带参数的构造函数,派生类没有定义任何带参数的构造函数,则不能直接调用基类的带参构造函数,程序编译不通过. 代码如下: #include<iostream> using namespace std; //基类Game,定义了两个构造函数和一个拷贝构造函数 class Ga

(copy)赋值构造函数的4种调用时机or方法

第一种调用方法: demo #include <iostream> using namespace std; class Text { public: Text() // 无参数构造函数 { m_a = 0; m_b = 0; cout << "无参数构造函数" << endl; } Text(int a) // 有参数构造函数 { m_a = a; m_b = 0; cout << "无参数构造函数" <<

解析C++转换构造函数(调用规则)

什么叫转换构造函数? 当一个构造函数只有一个参数,而且该参数又不是本类的const引用时,这种构造函数称为转换构造函数. 参考一下示例: // TypeSwitch.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <IOSTREAM> using namespace std; class Complex { public: Complex()

c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数

每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数).对于任意一个类A,如果不编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如: A(void);//缺省的无参数构造函数 A(const A&a);//缺省的拷贝构造函数 -A();//缺省的析构函数 A&operator=(const A &a);//缺省的赋值构造函数 1).“缺省的拷贝构造函数”和“缺省的赋值函数”均采用“位拷贝”而非“值拷贝”的方式来实现,倘

C++继承中析构函数 构造函数的调用顺序以及虚析构函数

首先说说构造函数.大家都知道构造函数里就能够调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就能够调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数,仅仅有这样子类才干在构造函数里使用基类的成员,所以是创建子类时先调用基类的构造函数然后再调用自己的构造函数.通俗点说,你要用某些物品.但这些物品你没办法自己生产,自然就要等别人生产出来,你才干拿来用. 接着就是析构函数了,上面说到子类是将基类的成员变成自己的成员,那么基类就会仅仅存在子类中直到子类调

避免在构造函数中调用虚方法(Do not call overridable methods in constructors)

CLR中说道,不要在构造函数中调用虚方法,原因是假如被实例化的类型重写了虚方法,就会执行派生类型对虚方法的实现.但在这个时候,尚未完成对继承层次结构中所有字段的初始化.所以,调用虚方法会导致不可预测的行为.归根结底,这是由于调虚方法时,直到运行时之前,都不会选择执行该方法的实际类型. 在MSDN中,也给我我们详细的提示和范例. https://msdn.microsoft.com/en-us/library/ms182331.aspx 那我们就亲手来测试一下,新建两个类,Perople类,Chi

构造函数的调用规则

1.当类中没有定义任何一个构造函数(包括拷贝构造函数)时,c++编译器会提供一个默认的无参构造函数和默认拷贝构造函数: 2.当类中定义了拷贝构造函数时,c++编译器不会提供默认的无参构造函数:(拷贝构造函数也是构造函数,它的函数名和默认的无参构造函数是同名的,这时候你必须得自己写一个构造函数来初始化对象) 3.当类中定义了任意的非拷贝构造函数(即有参构造函数或无参构造函数),c++编译器不会提供默认的无参构造函数: 4.默认拷贝构造函数对成员变量简单赋值: 结论:1.在定义类时,只要你在类里面写

C++笔记018:构造函数的调用规则

  原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 一.默认构造函数 两个特殊的构造函数 1.默认无参构造函数 当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空: 2.默认拷贝构造函数 当类中没有定义拷贝构造函数时,编译器默认提供一个默认拷贝构造函数,简单的进行成员变量的值复制. 二.构造函数调用规则 1.当类中没有定义任何一个构造函数时,C++编译器会提供默认无参构造函数和默认拷贝构造函数: 2.当类中定义了拷贝构造函数时,C++编译器不会提供无参构造函