IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++构造函数的种类及其作用 -> 正文阅读

[C++知识库]C++构造函数的种类及其作用

C++中有四类构造函数:默认构造函数初始化构造函数拷贝构造函数移动构造函数

当有了有参数的初始化构造函数,编译器就不会提供默认构造函数了。
只有当类没有声明任何构造函数时,编译器才会自动地生成默认构造函数。
所以如果我们定义了其他的构造函数,我们必须手动显示地定义一个默认构造函数。

  1. 默认构造函数和初始化构造函数
class Student
{
public:
    //默认构造函数
    Student()
    {
       num=1001;
       age=18;       
    }
    //初始化构造函数
    Student(int n,int a):num(n),age(a){}
private:
    int num;
    int age;
};
int main()
{
    //用默认构造函数初始化对象S1
    Student s1;
    //用初始化构造函数初始化对象S2
    Student s2(1002,18);
    return 0;
}

  1. 拷贝构造函数
#include<iostream>
#include<string>
using namespace std;

class Student
{
    public:
        Student() {cout<<"调用默认构造函数"<<endl;}
        Student(string name,string no):stuname(name),stuno(no)
        {
            cout<<"调用初始化构造函数"<<endl;
        }

        Student(const Student &s)
        {
            cout<<"调用拷贝构造函数"<<endl;
            this->stuname=s.stuname;
            this->stuno=s.stuno;
        }
        ~Student() {cout<<"调用析构函数"<<endl;}

        void printinfo(Student sss)
        {
            cout<<" student.stuname: "<<sss.stuname<<" student.stuno: "<<sss.stuno<<endl;
        }

    private:
        string stuname;
        string stuno;
        
};

int main()
{
    string s1,s2;
    s1="CRP";
    s2="1906400038";
    Student st(s1,s2);
    st.printinfo(st);
    Student st2(st);
    st2.printinfo(st2);
    
    
    return 0;
}

在这里插入图片描述
3. 移动构造函数

#include <iostream>
using namespace std;
class demo{
public:
    demo():num(new int(0)){
        cout<<"construct!"<<endl;
    }
    demo(const demo &d):num(new int(*d.num)){
        cout<<"copy construct!"<<endl;
    }
    //添加移动构造函数
    demo(demo &&d):num(d.num){
        d.num = NULL;
        cout<<"move construct!"<<endl;
    }
    ~demo(){
        cout<<"class destruct!"<<endl;
    }
private:
    int *num;
};
demo get_demo(){
    return demo();
}
int main(){
    demo a = get_demo();
    return 0;
}

num指针变量采用的是浅拷贝的复制方式,同时在函数内部重置了d.num,有效避免了程序结束后,同一块堆空间被多次释放。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:04:24  更:2022-03-16 22:05:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:37:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码