C++-构造函数-接口

cpp 复制代码
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>

using namespace std;

class Ms{
	private:
		char *p;
		int len;
	public:
		Ms(const char* str);
		Ms();
		~Ms();
		void copy(const Ms& r);
		void append(const Ms& r);
		void Show();
		bool compare(const Ms& r);
		void swap(Ms& r);
};

Ms::Ms(const char* str)
{
//	cout << "Ms单参构造函数" << endl;
	len=strlen(str);
	p=(char*)calloc(1,len+1);
	strcpy(p,str);
}

Ms::Ms()
{
//	cout << "Ms无参构造函数" << endl;
	p=nullptr;
	len=0;
}

Ms::~Ms()
{
	if(p!=NULL)
	{
		free(p);
	}
}

void Ms::copy(const Ms& r)//复制
{
	if(p!=NULL)
	{
		free(p);
	}
	len=r.len;
	p=(char*)calloc(1,len+1);
	strcpy(p,r.p);
}

void Ms::append(const Ms& r)//拼接
{
	len=len+r.len;
	char* backup=p;
	p=(char*)calloc(1,len+1);
	strcpy(p,backup);
	strcat(p,r.p);
	free(backup);
}

void Ms::Show()//输出
{
	cout << p << endl;
}

bool Ms::compare(const Ms& r)//比较
{
	return strcmp(p,r.p)==0;
}

void Ms::swap(Ms& r)//交换
{
	char* temp = p;
	p = r.p;
	r.p = temp;
}

int main(int argc,const char** argv){
	Ms str="dio";
	Ms ptr;
	
	ptr.copy("stand");
	ptr.Show();

	ptr.append("power");
	ptr.Show();

	if(ptr.compare(str)==1)
	{
		cout << "str和ptr一样" << endl;
	}else{
		cout << "str和ptr不一样" << endl;
	}

	ptr.swap(str);
	str.Show();
	ptr.Show();

}
cpp 复制代码
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
#include <fcntl.h>

using namespace std;

class File{
private:
	FILE* fp;
public:
	File(const char* filename);//构造函数
	void Write(const string str);//写入
	string Read(int size);//读取
	~File();//析构函数
};

File::File(const char* filename)
{
	fp=fopen(filename,"w+");
	if(fp==NULL)
	{
		cout << "文件打开失败" << endl;
		return;
	}
}

void File::Write(const string str)
{
	const char* ptr =str.data();
	if(fwrite(ptr,strlen(ptr),1,fp)==0)
	{
		cout << "数据写入失败" << endl;
	}
}

string File::Read(int size)
{
	char ch[size+1]="";
	fseek(fp,0,SEEK_SET);
	if(fread(ch,size,1,fp)==0)
	{
		cout << "数据读取失败" << endl;
	}
	string ptr =ch;
	return ptr;
}

File::~File()
{
	if(fp!=NULL)
	{
		fclose(fp);
		fp=NULL;
	}
}

int main(int argc,const char** argv){
	File f="./1.txt";
	f.Write("WORLD");
	string buf=f.Read(3);
	cout << buf << endl;

}
cpp 复制代码
#include <iostream>
#include <pthread.h>
#include <unistd.h>
using namespace std;
 
enum kinds_mutex
{
	MUTEX_FAST,
	MUTEX_CHECK,
	MUTEX_RECURSION
};
 
class Mutex
{
	private:
		pthread_mutex_t mutex;
		enum kinds_mutex kinds;
	public:
		Mutex();
		void setMutex(enum kinds_mutex kinds);
		~Mutex();
		void lock();
		void unlock();
};
 
 
Mutex::Mutex()
{
	pthread_mutex_init(&mutex,NULL);
}
 
 
void Mutex::setMutex(enum kinds_mutex kinds)
{
	switch(kinds)
	{
		case MUTEX_FAST:
			{
				pthread_mutex_init(&mutex,NULL);
				break;
			}
		case MUTEX_CHECK:
			{
				pthread_mutexattr_t attr;
				pthread_mutexattr_init(&attr);
				pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_ERRORCHECK_NP);
				pthread_mutex_init(&mutex,&attr);
				break;
			}
		case MUTEX_RECURSION:
			{
				pthread_mutexattr_t attr;
				pthread_mutexattr_init(&attr);
				pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE_NP);
				pthread_mutex_init(&mutex,&attr);
				break;
			}
 
	}
}
 
 
Mutex::~Mutex()
{
	pthread_mutex_destroy(&mutex);
}
 
 
void Mutex::lock()
{
	pthread_mutex_lock(&mutex);
}
 
 
void Mutex::unlock()
{
	pthread_mutex_unlock(&mutex);
}
 
 
Mutex m1,m2;
 
 
void* pthread_main(void* arg)
{
	while(1)
	{
		m2.lock();
		cout << "线程2"<<endl;
		sleep(1);
		m1.unlock();
	}
}
 
 
int main()
{
	pthread_t id;
	m1.setMutex(MUTEX_FAST);
	m2.setMutex(MUTEX_FAST);
	m2.lock();
	pthread_create(&id,0,pthread_main,NULL);
	pthread_detach(id);
	while(1)
	{
		m1.lock();
		cout<<"线程1"<<endl;
		sleep(1);
		m2.unlock();
	}
 
	return 0;
}
相关推荐
峥嵘life16 分钟前
Android WiFi 热点 Channel 信道 和 Frequency 频率 转换总结
android·开发语言
小星星闪亮登场38 分钟前
2026萌新联赛第三场-- (郑州轻工业大学)
数据结构·c++·经验分享·算法·贪心算法·排序算法·深度优先
wgego1 小时前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
梓䈑1 小时前
【用 Vibe Coding 实现的 C++17 在线判题系统】前端开发 + Web 自动化测试
前端·c++·ai编程
冻柠檬飞冰走茶1 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
TunerT_TQ2 小时前
Valhalla 静态工程审阅 #018|MMCV 源码证据驱动评测【大厂开源基础设施特辑】
c++·开源·mfc·#计算机视觉·#商汤科技·#openmmlab·#静态源码审计
山峰哥2 小时前
数据库工程与SQL调优:从慢查询到秒级响应的实战之路
java·开发语言·数据库·sql·深度优先·启发式算法
wangjialelele2 小时前
Selenium4 + Java Web自动化测试入门指南:从环境搭建到常用操作详解
java·开发语言·前端·测试工具·自动化
Awna2 小时前
Golang 大小写可见性规范
开发语言·后端·golang
别动我齐刘海2 小时前
Day6 unitree_G1人形机器人GMR—— MotionInput
c语言·c++·人工智能·学习·机器学习·机器人·github