美文网首页
c++ 构造函数

c++ 构造函数

作者: 简书网abc | 来源:发表于2024-01-16 23:18 被阅读0次
#include <iostream>
#include <stdio.h>
#include <string.h>
//#include <vector>

using namespace std;

class String {
public:
    String(const char* cStr = 0);   // c风格拷贝构造
    String(const String& str);      // c++风格拷贝构造
    String& operator=(const String& str);   // 拷贝赋值
    ~String();
    char* get_c_str() const { return m_data; }
private:
    char* m_data;
};

// c风格拷贝构造函数, C风格的参数, 拷贝构造
inline
String::String(const char* cStr) {
    if (cStr) {
        this->m_data = new char[strlen(cStr) + 1];
        strcpy(this->m_data, cStr);
    } else {    // 未指定初始值
        this->m_data = new char[1];
        *(this->m_data) = '\0';
    }
}

// c++风格拷贝构造函数, 分配空间,然后整体复制过去.
inline
String::String(const String& str) {
    this->m_data = new char[strlen(str.m_data) + 1];
    strcpy(this->m_data, str.m_data);
}

// 拷贝赋值函数, 经典写法
inline String&
String::operator=(const String& str) {
    if(this == &str) {  // 自我检测..., 防止左右相同时,本身被释放.
        return *this;
    }
    delete[] this->m_data;  // 1,删除自己
    this->m_data = new char[strlen(str.m_data) + 1];    // 2, 分配空间
    strcpy(this->m_data, str.m_data);    // 3, 复制内容
    return *this;
}


// 析构函数
inline
String::~String() {
    delete[] m_data;
}


// 全局函数 << 操作符重载
inline ostream&
operator << (ostream& os, const String& str) {
    os << str.get_c_str();
    return os;
}


int main()
{
    String s1("abc");   // c风格构造函数
    cout << "s1: " << s1 << endl;

    String s2(s1);      // c++风格拷贝构造函数
    cout << "拷贝构造函数s2: " << s2 << endl;

    String s3 = s2; // c++风格拷贝构造函数  // todo 声明并且初始化的时候使用的是拷贝初始化操作
    cout << "初次初始化,拷贝构造函数s3: " << s3 << endl;

    s3 = s1;    // 拷贝赋值函数
    cout << "已经存在的变量, 拷贝赋值函数s3: " << s3 << endl;

    return 0;
}

相关文章

  • windows逆向3

    VC 程序内存和编译的一些特征C++ 构造函数C++ 成员函数C++ 析构函数C++ 全局对象的构造C++ 全局对...

  • C++ 构造过程

    构造函数 C++中每个类必须有一个构造函数,如果用户没有自行编写构造函数,则C++会自动提供一个无参数的构造函数,...

  • C++:面向对象基础

    构造函数 C++中有三种构造函数:默认构造函数,有参构造函数,拷贝构造函数 类对象的初始化 括号法//默认构造函数...

  • [C++之旅] 10 构造函数

    [C++之旅] 10 构造函数 构造函数的特点 构造函数在对象实例化时被自动调用 构造函数与类同名 构造函数没有返...

  • scala学习笔记-构造函数

    scala的构造函数分为主构造函数和辅助构造函数 【辅助构造函数】比较容易理解,它们同C++和Java的构造函数十...

  • c++面向对象-构造、析构、初始化列表

    构造函数 构造函数是指创建对象的时候,会调用的函数。C++构造函数可以重载,指针或者对象均可调用构造函数。 析构函...

  • C++基础③new对象,继承,友元函数,函数的可变参数

    接续上篇C++基础②构造函数,析构函数,拷贝构造函数 前言 C++是一门面向对象的编程语言 , 创建用以创建对象 ...

  • C++ 构造函数,类的成员变量

    c++ 05 构造函数无参构造函数有参构造函数 拷贝构造函数 浅拷贝 深拷贝 类的成员变量 四类特殊的成员变量

  • [字符串] 自己实现一个string类(一)

    C++类一般包括:构造函数,拷贝构造函数,赋值构造函数和析构函数四大函数。 在上面的赋值构造函数中,都是先dele...

  • C++拷贝构造函数——难点

    拷贝构造函数 - C++详细 | 编程字典

网友评论

      本文标题:c++ 构造函数

      本文链接:https://www.haomeiwen.com/subject/fkklodtx.html