首页 > 其他分享 >默认构造函数、参数化构造函数、拷贝构造函数、析构函数

默认构造函数、参数化构造函数、拷贝构造函数、析构函数

时间:2024-07-07 19:41:50浏览次数:12  
标签:函数 示例 默认 参数 析构 MyClass 拷贝 构造函数

在C++编程语言中,构造函数和析构函数是用于管理对象生命周期的重要函数。以下是关于默认构造函数、参数化构造函数、拷贝构造函数和析构函数的详细解释及代码示例。

默认构造函数

默认构造函数是在没有参数的情况下创建对象时调用的构造函数。如果用户没有定义任何构造函数,编译器会提供一个隐式默认构造函数。用户也可以显式定义默认构造函数。

示例代码:

#include <iostream>

class MyClass {
public:
    // 默认构造函数
    MyClass() {
        std::cout << "Default constructor called." << std::endl;
    }
};

int main() {
    MyClass obj; // 调用默认构造函数
    return 0;
}

3参数化构造函数

参数化构造函数是带有参数的构造函数,用于在创建对象时进行初始化。

示例代码:

#include <iostream>

class MyClass {
private:
    int value;
public:
    // 参数化构造函数
    MyClass(int v) : value(v) {
        std::cout << "Parameterized constructor called with value: " << value << std::endl;
    }
};

int main() {
    MyClass obj(42); // 调用参数化构造函数
    return 0;
}

拷贝构造函数

拷贝构造函数用于通过另一个同类型的对象来初始化新对象。其形式通常为 ClassName(const ClassName &other)。如果不显式定义,编译器会生成一个默认的拷贝构造函数。

示例代码:

#include <iostream>

class MyClass {
private:
    int value;
public:
    // 参数化构造函数
    MyClass(int v) : value(v) {
        std::cout << "Parameterized constructor called with value: " << value << std::endl;
    }
    
    // 拷贝构造函数
    MyClass(const MyClass &other) : value(other.value) {
        std::cout << "Copy constructor called with value: " << value << std::endl;
    }
};

int main() {
    MyClass obj1(42);       // 调用参数化构造函数
    MyClass obj2 = obj1;    // 调用拷贝构造函数
    return 0;
}

3析构函数

析构函数用于在对象生命周期结束时执行清理操作。析构函数没有参数,也没有返回值,其名称为类名前加 ~ 号。编译器会自动调用析构函数。

示例代码:

#include <iostream>

class MyClass {
public:
    // 默认构造函数
    MyClass() {
        std::cout << "Default constructor called." << std::endl;
    }
    
    // 析构函数
    ~MyClass() {
        std::cout << "Destructor called." << std::endl;
    }
};

int main() {
    MyClass obj; // 调用默认构造函数
    return 0;    // 在此处对象 `obj` 被销毁,调用析构函数
}

结合示例
一个类中包含所有这些构造函数和析构函数的完整示例:

#include <iostream>

class MyClass {
private:
    int value;
public:
    // 默认构造函数
    MyClass() : value(0) {
        std::cout << "Default constructor called." << std::endl;
    }
    
    // 参数化构造函数
    MyClass(int v) : value(v) {
        std::cout << "Parameterized constructor called with value: " << value << std::endl;
    }
    
    // 拷贝构造函数
    MyClass(const MyClass &other) : value(other.value) {
        std::cout << "Copy constructor called with value: " << value << std::endl;
    }
    
    // 析构函数
    ~MyClass() {
        std::cout << "Destructor called." << std::endl;
    }
};

int main() {
    MyClass obj1;           // 调用默认构造函数
    MyClass obj2(42);       // 调用参数化构造函数
    MyClass obj3 = obj2;    // 调用拷贝构造函数
    return 0;               // 程序结束时依次调用析构函数
}

在上述代码中,演示了如何定义和使用默认构造函数、参数化构造函数、拷贝构造函数和析构函数。每个构造函数和析构函数在创建和销毁对象时都会被调用,打印相应的消息以示区别。

标签:函数,示例,默认,参数,析构,MyClass,拷贝,构造函数
From: https://www.cnblogs.com/mxh010211/p/18271328

相关文章

  • 【C++学习笔记 8】C++中的析构函数
    构造函数一般用于创建实例或初始化,而析构(destructor)函数则是在销毁一个对象时使用的。析构函数可以用在释放任何内容或需要清理内存空间的场景。举个例子#include<iostream>classEntity{public: floatX,Y; Entity() { X=0.0f; Y=0.0f; std::cout<<......
  • 什么是构造函数?Java 中构造函数的重载如何实现?
    构造函数,就像是建筑房屋时的奠基仪式,是Java类中一个特殊的方法,主要用于初始化新创建的对象。每当创建一个类的新实例时,构造函数就会自动调用,负责为这个新对象分配内存,并对其进行必要的设置,确保对象处于可用状态。它有着与类同名的特殊身份,没有返回类型,甚至连void也不需要声明......
  • 字符串的类区别、自动扩容、深浅拷贝
    1、stringstringBufferstrngBuilder区别可变性:string中的vlaue值是final修饰的,是一个不可变的类,每一次修改string的值的时候,都会产生一个新的对象。而stringBuffer和strngBuilder是一个可变类。字符串的变更不会产生新的对象。线程安全性:string是一个不可变的类,所......
  • 《C++ Primer》导学系列:第 13 章 - 拷贝控制
    13.1拷贝、赋值与析构函数拷贝控制是C++中类设计的重要组成部分,用于管理对象的复制、赋值和销毁过程。理解并正确实现拷贝控制函数(拷贝构造函数、拷贝赋值运算符和析构函数)对于编写健壮和高效的C++程序至关重要。13.1.1拷贝构造函数拷贝构造函数用于创建对象的副本。它的......
  • 危险!属性拷贝工具的坑!
    1.背景​之前在专栏中讲过“不推荐使用属性拷贝工具”,推荐直接定义转换类和方法使用IDEA插件自动填充get/set函数。不推荐的主要理由是:有些属性拷贝工具性能有点差有些属性拷贝工具有“BUG”使用属性拷贝工具容易存在一些隐患(后面例子会讲到)2.示例首先公司内部就......
  • 科大讯飞:说说零拷贝技术和多路复用技术?
    零拷贝技术和多路复用技术是现代计算机系统和网络编程中两项重要的优化手段,旨在提高数据处理和传输的效率。如高性能框架Netty中,即使用了零拷贝技术又使用了多路复用技术,同时来保证Netty框架的高性能运行。1.零拷贝技术零拷贝(Zero-copy)技术是一种计算机操作系统中用于提高数......
  • NzN的C++之路--拷贝构造函数&&赋值运算符重载
    目录Part1拷贝构造函数一、概念二、特征Part2赋值运算符重载一、运算符重载二、赋值运算符重载三、前置++和后置++重载Part3const成员Part4 取地址及const取地址操作符重载 Part1拷贝构造函数一、概念        拷贝构造函数:只有单个形参,该形参......
  • C++拷贝构造函数、运算符重载函数、赋值运算符重载函数、前置++和后置++重载等的介绍
    文章目录前言一、拷贝构造函数1.概念2.特征3.编译器生成默认拷贝构造函数4.拷贝构造函数典型使用场景二、运算符重载函数三、赋值运算符重载函数1.赋值运算符重载格式2.赋值运算符只能重载成类的成员函数不能重载成全局函数3.编译器生成一个默认赋值运算符重载四......
  • 使用三种方式通过数组实现拷贝复制
    三种通过数组的方式进行数组的拷贝,其本质都是通过地址传参,来实现数组的拷贝。1、通过数组访问这种访问数组的方式是最常见的voidcopy1(doubletarget[],doublesource[],intlen){for(inti=0;i<len;++i){target[i]=source[i];}}i......
  • C++ 面向对象高级开发 3、构造函数
    1、内联函数inline 内联函数速度比较快 最终是不是inline实际上是由编译器决定的。 一般比较简单,编译器就能确定inline函数 2、AccessLevel访问级别  3、构造函数Construct默认实参。Defaultargument.充分利用构造函数的特殊语法,对数据进行初始化,这是一种比......