C++ 构造函数的分类及调用

简介: C++ 构造函数的分类及调用

两种分类方式:

  • 按参数分:有参构造和无参构造
  • 按类型分:普通构造和拷贝构造

三种调用方式:

分类演示

class Person
{
public:
    Person()    //无参构造 
    {
        cout << "Person的无参构造函数调用" << endl;
    }
    Person(int a)  //有参构造
    {
        age = a;
        cout << "Person的有参构造函数调用" << endl;
    }
    //拷贝构造函数
    Person(const Person &p)
    {
        age = p.age;
    }
    ~Person()
    {
        cout << "Person的析构函数调用" << endl;
    }
    int age;
};

调用的三种方式

1.括号法

void test01()
{
    //1.括号法
    Person p;       //默认构造函数调用
    Person p2(10);  //有参构造函数
    Person p3(p2);  //拷贝构造函数
}

注意事项:调用默认构造函数时,不要加(),因为下面这行代码编译器会认为是一个函数的声明,不会认为在创建对象

2.显示法

void test01()
{
    //2.显示法
    Person p;                  //默认构造函数调用
    Person p2 = Person(10);    //有参构造函数
    Person p3 = Person(p2);    //拷贝构造函数
}

在Person p2=Person(10)中,Person(10)是一个匿名对象。匿名对象的特点是:当前行执行结束后,系统会立即回收掉匿名对象


注意事项:不要利用拷贝构造函数初始化匿名对象,编译器会认为Person(p3)===Person p3;


3.隐式转化法

void test01()
{   
    //3.隐式转换法
    Person p4 = 10;  //相当于 Person p4 = Person(10)   //有参构造
    Person p5 = p4;   //拷贝构造
}


三种方法中括号法最简单

目录
相关文章
|
2月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
130 5
|
2月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
138 4
|
4月前
|
编译器 C++
C++ 类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。
86 30
|
3月前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
39 1
|
3月前
|
C++
C++构造函数初始化类对象
C++构造函数初始化类对象
28 0
|
3月前
|
C++
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
35 0
|
5月前
|
编译器 C++
C++的基类和派生类构造函数
基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承。构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。 在设计派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数完成,但是大部分基类都有 private 属性的成员变量,它们在派生类中无法访问,更不能使用派生类的构造函数来初始化。 这种矛盾在C++继承中是普遍存在的,解决这个问题的思路是:在派生类的构造函数中调用基类的构造函数。 下面的例子展示了如何在派生类的构造函数中调用基类的构造函数:
|
6月前
|
编译器 C++
【C++】详解构造函数
【C++】详解构造函数
|
7月前
|
存储 编译器 C++
【C++】类和对象④(再谈构造函数:初始化列表,隐式类型转换,缺省值
C++中的隐式类型转换在变量赋值和函数调用中常见,如`double`转`int`。取引用时,须用`const`以防修改临时变量,如`const int& b = a;`。类可以有隐式单参构造,使`A aa2 = 1;`合法,但`explicit`关键字可阻止这种转换。C++11起,成员变量可设默认值,如`int _b1 = 1;`。博客探讨构造函数、初始化列表及编译器优化,关注更多C++特性。
|
7月前
|
存储 编译器 C语言
【C++】类和对象②(类的默认成员函数:构造函数 | 析构函数)
C++类的六大默认成员函数包括构造函数、析构函数、拷贝构造、赋值运算符、取地址重载及const取址。构造函数用于对象初始化,无返回值,名称与类名相同,可重载。若未定义,编译器提供默认无参构造。析构函数负责对象销毁,名字前加`~`,无参数无返回,自动调用以释放资源。一个类只有一个析构函数。两者确保对象生命周期中正确初始化和清理。