11.19c++面向对象+单例模式

编写如下类: class File{ FILE* fp }; 1:构造函数,打开一个指定的文件 2:write函数 向文件中写入数据 3:read函数,从文件中读取数据,以string类型返回

代码实现:

cpp 复制代码
#include <iostream>

using namespace std;

class myfile{
    FILE *fp;
public:
    myfile(const char *path,const char *type);//通过fp绑定一个构造函数
    ~myfile();//通过fp绑定一个析构函数
    int write(char *buf,int signal_size,int terms);//申明一个write函数,向文件中写入数据
    int read(char *buf,int signal_size,int terms);//申请一个read函数,从文件中读取数据,返回string类型
};
myfile::myfile(const char *path,const char *type){
    fp=fopen(path,type);
    if(fp==NULL){
        perror("fopen");
    }
}
myfile::~myfile(){
    fclose(fp);
}
int myfile::write(char *buf,int signal_size,int terms){
    int res=fwrite((char *)buf,signal_size,terms,fp);
    return res;
}
int myfile::read(char *buf,int signal_size, int terms){
    int res=fread((char *)buf,signal_size,terms,fp);
    return res;
}
int main()
{
    myfile file_src={"C:\\Users\\pzctj\\Documents\\81_C++\\day2\\myfile\\main.cpp","r"};
    myfile file_dest={"myfile.txt","w"};
    char str[1024]={0};
   // string buf=str;
    while(1){
        //buf.clear();
       int res=file_src.read((char *)str,1,1024);
        if(res==0){
            cout << "文件读取结束" << endl;
            break;
        }
        file_dest.write((char *)str,1,res);
    }
    return 0;
}

单例模式实现:

懒汉模式:
cpp 复制代码
#include <iostream>

using namespace std;

class signalTon{
private:
    class Mutex{
         pthread_mutex_t mutex;
    public:
        Mutex(){
            pthread_mutex_init(&mutex,NULL);
            cout << "无参互斥锁构造函数" << endl;
        }
        void lock(){
            pthread_mutex_lock(&mutex);
        }
        void unlock(){
            pthread_mutex_unlock(&mutex);
        }
    };
    signalTon(){
        cout << "无参signalTon构造函数" << endl;
    }
    static Mutex mutex;
public:
    signalTon(const signalTon& r)=delete ;//删除自动分配的拷贝构造函数
    //signalTon()=default;//确保必须分配构造函数
    //公开接口,用来调用构造函数,构建唯一对象或者返回唯一对象
    static signalTon* getInstance(){
        mutex.lock();
        static signalTon* instance=NULL;
        if(instance==NULL){
            sleep(1);//延时1秒,对于多线程懒汉模式可能if判断就不起作用,因此引入互斥锁
            instance=new signalTon;//堆区开辟空间并调用构造函数为对象初始化
        }
        mutex.unlock();
        return instance;
    }
};
signalTon::Mutex signalTon::mutex;//静态成员属性mutex开辟空间
void* task(void *arg){
    signalTon* s1=signalTon::getInstance();
    cout << s1 << endl;
}

int main()
{
    pthread_t tid;
    pthread_create(&tid,NULL,task,NULL);
    pthread_detach(tid);
    signalTon* s1=signalTon::getInstance();
    cout << s1 << endl;
    return 0;
}
饿汉模式:
cpp 复制代码
#include <iostream>

using namespace std;

class signalTon{
private:
    signalTon(){
        cout << "无参signalTon构造函数" << endl;
    }
    static signalTon* instance;
public:
    signalTon(const signalTon& r)=delete ;//删除自动分配的拷贝构造函数
    //signalTon()=default;//确保必须分配构造函数
    //公开接口,用来调用构造函数,构建唯一对象或者返回唯一对象
    static signalTon* getInstance(){
        return instance;
    }
};
signalTon* signalTon::instance=new signalTon;
void* task(void *arg){
    signalTon* s1=signalTon::getInstance();
    cout << s1 << endl;
}

int main()
{
    pthread_t tid;
    pthread_create(&tid,NULL,task,NULL);
    pthread_detach(tid);
    signalTon* s1=signalTon::getInstance();
    cout << s1 << endl;
    return 0;
}
相关推荐
涛ing20 分钟前
32. C 语言 安全函数( _s 尾缀)
linux·c语言·c++·vscode·算法·安全·vim
xrgs_shz1 小时前
MATLAB的数据类型和各类数据类型转化示例
开发语言·数据结构·matlab
独正己身1 小时前
代码随想录day4
数据结构·c++·算法
我不是代码教父3 小时前
[原创](Modern C++)现代C++的关键性概念: 流格式化
c++·字符串格式化·流格式化·cout格式化
利刃大大4 小时前
【回溯+剪枝】找出所有子集的异或总和再求和 && 全排列Ⅱ
c++·算法·深度优先·剪枝
子燕若水4 小时前
mac 手工安装OpenSSL 3.4.0
c++
来恩10034 小时前
C# 类与对象详解
开发语言·c#
*TQK*4 小时前
ZZNUOJ(C/C++)基础练习1041——1050(详解版)
c语言·c++·编程知识点
komo莫莫da5 小时前
寒假刷题Day19
java·开发语言