您的位置:首页 > 汽车 > 新车 > 国企央企招聘2022_网站制作论文优帮云_河南网站开发公司_肇庆网站建设制作

国企央企招聘2022_网站制作论文优帮云_河南网站开发公司_肇庆网站建设制作

2025/2/24 1:39:36 来源:https://blog.csdn.net/Unique_yt/article/details/145741578  浏览:    关键词:国企央企招聘2022_网站制作论文优帮云_河南网站开发公司_肇庆网站建设制作
国企央企招聘2022_网站制作论文优帮云_河南网站开发公司_肇庆网站建设制作

1.思维导图

2.封装一个mystring类 ,
拥有私有成员: char* p
                           int len
需要让以下代码编译通过,并实现对应功能:
mystring str = "hello";
mystring ptr;
ptr.copy(str) ;
ptr.append(str);
ptr.show();输出ptr代表的字符串
ptr.compare(str) ;比较ptr和str是否一样
ptr.swap(str) ;交换ptr 和 str的内容

代码:

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>using namespace std;class mystring{
private:char* p;int len;
public:mystring();mystring(const char* str);~mystring();void copy(const mystring& r);void show();void append(const mystring& r);bool compare(const mystring& r);void swap(mystring& r);// 再写一个函数,要求实现将 mystrwing 转换成 const char*const char* data();
};mystring::mystring(){p = NULL;len = 0;
}mystring::mystring(const char* str){len = strlen(str);// 计算str实际长度p = (char*)calloc(1,len+1);// 根据str的实际长度,申请对应大小的堆空间strcpy(p,str);// 将str拷贝到堆空间里面去
}mystring::~mystring(){if(p != NULL){free(p);}
}// 其实就是p的set接口
void mystring::copy(const mystring& r){if(p != NULL){free(p);}len = r.len;p = (char*)calloc(1,len+1);strcpy(p,r.p);
}// 其实就是 p 的 get接口
const char* mystring::data(){return p;
}void mystring::show(){cout << p << endl;
}void mystring::append(const mystring& r){len = len + r.len;char* backup = p;p = (char*)calloc(1,len+1);strcpy(p,backup);strcat(p,r.p);free(backup);
}bool mystring::compare(const mystring& r){return strcmp(p,r.p) == 0;
}void mystring::swap(mystring& r){char* temp = p;p = r.p;r.p = temp;
}int main(int argc,const char** argv){mystring str = "hello";printf("str = %s\n",str.data());mystring ptr;ptr.copy("你好");ptr.show();ptr.append("世界");ptr.show();//ptr.copy("hello");if(ptr.compare(str)){cout << "ptr 和 str 一样" << endl;}else{cout << "ptr 和 str 不一样" << endl;}ptr.swap(str);ptr.show();str.show();}

3.封装一个 File 类,拥有私有成员 File* fp ,实现以下功能 File f = "文件名" 要求打开该文件; f.write(string str) 要求将str数据写入文件中; string str = f.read(int size) 从文件中读取最多size个字节,并将读取到的数据返回 ;析构函数

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>using namespace std;  class File {
private:FILE* fp; // 文件指针public:// 构造函数,打开文件File(const char* filename) {fp = fopen(filename, "r+"); // 以读写模式打开文件if (!fp) {fp = fopen(filename, "w+"); // 如果文件不存在,创建并打开if (!fp) {cout << "文件打开失败" << endl;exit(1);}}}// 析构函数,关闭文件~File() {if (fp) {fclose(fp); // 关闭文件}}// 写入数据到文件void write(const char* str) {if (fp) {fputs(str, fp); // 将字符串写入文件fflush(fp);    // 刷新缓冲区,确保数据写入文件} else {cout << "要写入内容的文件未打开" << endl;}}// 从文件中读取数据string read(int size) {string result;if (fp) {char* buffer = (char*)calloc(1, size + 1); // 使用 calloc 动态分配缓冲区if (!buffer) {cout << "内存分配失败" << endl;return result;}fseek(fp, 0, SEEK_SET);           // 将文件指针移动到文件开头size_t bytesRead = fread(buffer, 1, size, fp); buffer[bytesRead] = '\0';        result = buffer;                  free(buffer);                     // 释放动态分配的内存} else {cout << "文件未打开以供读取" << endl;}return result;}
};int main() {File f("test.txt");// 写入数据f.write("Hello, World!\n");// 读取数据string content = f.read(100);cout << "从文件中读取到的信息为:" << content << endl;return 0;
}

4.封装一个 Mutex 互斥锁类 要求: 构造函数:初始化互斥锁,并选择互斥锁的种类 lock 上锁互斥锁 unlock 解锁互斥锁 析构函数,销毁互斥锁 并且开启一个线程测试该互斥锁

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
#include <mutex>
#include <thread>
#include <pthread.h>using namespace std;class Mutex {
private:pthread_mutex_t mutex; // 互斥锁public:// 构造函数,初始化互斥锁Mutex(int type = PTHREAD_MUTEX_ERRORCHECK_NP) { //错误检查锁pthread_mutexattr_t attr;pthread_mutexattr_init(&attr); // 初始化互斥锁属性pthread_mutexattr_settype(&attr, type); // 设置互斥锁类型pthread_mutex_init(&mutex, &attr); // 初始化互斥锁pthread_mutexattr_destroy(&attr); // 销毁互斥锁属性}// 析构函数,销毁互斥锁~Mutex() {pthread_mutex_destroy(&mutex); // 销毁互斥锁}// 上锁互斥锁void lock() {pthread_mutex_lock(&mutex); // 上锁}// 解锁互斥锁void unlock() {pthread_mutex_unlock(&mutex); // 解锁}
};// 全局变量,用于线程测试
Mutex test_mutex;
Mutex test_mutex1;
//test_mutex1.lock();// 1#线程函数
void* thread1_func(void* arg) {while(1) {test_mutex1.lock(); // 上锁cout << "1#线程" << endl;sleep(1);test_mutex.unlock(); // 解锁}return NULL;
}int main() {pthread_t thread1;test_mutex1.lock();// 创建一个线程if (pthread_create(&thread1, 0, thread1_func, 0) != 0) {cerr << "线程1创建失败" << endl;return 1;}//主线程while(1) {test_mutex.lock(); // 上锁cout << "主线程" << endl;sleep(1);test_mutex1.unlock();}pthread_join(thread1,NULL);return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com