随笔 - 1762  文章 - 0  评论 - 109  阅读 - 431万

String类的写法

听侯捷老师讲课的笔记:

string.h头文件:

复制代码
#pragma once
class String
{
public:
    String(const char* cstr);
    String(const String& str);
    String& operator =(const String& str);
    ~String();
    
    char* get_c_str() const { return m_data; }//这个类的成员函数内的所有操作,不准备改变私有数据m_data,所以要加上
                                              //const去修饰这个函数,一出手就要:不同凡响
private:
    char* m_data;
};


inline String::String(const char* cstr=0)
{
    if (cstr)
    {
        std::cout << "如果传进来的字符串不为空,它就是:"<<std::endl;
        m_data = new char[strlen(cstr) + 1];
        strcpy(m_data, cstr);
    }
    else
    {
        std::cout << "如果传进来的字符串为空,它就是:" << std::endl;
        m_data = new char[1];
        *m_data = '\0';
    }
}
inline String::~String()
{
    std::cout << std::endl << "析构函数此时被调用!" << std::endl;
    delete[] m_data;
}
//编写拷贝构造函数
inline String::String(const  String& str)
{
    m_data = new char[strlen(str.m_data)+1];
    strcpy(m_data, str.m_data);
}

//编写拷贝赋值函数
inline String& String::operator =(const String& str)
{
    if (this == &str)
        return *this;
    delete[] m_data;
    m_data = new char[strlen(str.m_data) + 1];
    strcpy(m_data, str.m_data);
    return *this;
}


//重载输出符<<
#include<iostream>
std::ostream& operator <<(std::ostream& os, const String& str)
{
    os << str.get_c_str();
    return os;
}
View Code
复制代码

string.cpp源文件:

复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include"string.h"

using namespace std;
int main()
{
    
    String str("Greetings!,china!");
    cout <<"str:  "<< str << endl;
    
    cout << endl;
    String* p = new String("hello,world!");
    cout << "*p:  " << *p << endl;
    delete p;

    cout << endl;
    String str1("to be or not to be");
    cout << "str1:  " << str1 << endl;
    
    cout << endl;
    String str2("to be or not to be");
    cout << "str2:  " << str2 << endl;

    cout << endl;
    String str3;
    str3 = str2;
    cout << "str3:  " << str3 << endl;

    cout << endl;
    cout << "在做自我赋值str3 = str3之后:" << endl;
    str3 = str3;
    cout << "str3:  " << str3 << endl;

    system("pause");
    return 0;
}
View Code
复制代码

 

posted on   一杯明月  阅读(229)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示