c++小学期的实验二

2024-06-07 14:32
文章标签 c++ 实验 小学

本文主要是介绍c++小学期的实验二,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  实验一是做一个猜单词的游戏,bug太多,所以就不贴出来了。。。

  实验二的题目是:

1.完成图形类及其派生类的定义

(1) 设计一个计算图形面积的类库。它的顶层是一个抽象类,并且提供三个纯虚函数:显示数据成员、返回面积和返回体积。

class Shape

{public:

virtual void showData()=0;

        virtualdouble reArea()=0;

        virtualdouble reVolume()=0;

};

    第二层有Shape类派生TwoDimShape(二维图形)和ThreeShape(三维图形)类。他们增加了有关的数据成员,但没有成员函数的实现。

第三层派生具体的图形类。TwoDimShape类派生Circle(圆)、Elipse(椭圆)、Rectangle(矩形)和Triangle(三角形)等类。ThreeShape类派生Ball(球体)、Cylider(圆柱体)和RectangularParallelepiped(长方体)等类。

(2) 设计一个测试程序,全面测试你的设计,要求使用基类指针引用派生类对象的三个函数。

2.用异质链表组织上述各类图形对象。

(1) 实现单链表:将结点数据域定义为int,链表具有插入结点、删除结点、反转、遍历等功能,并测试其正确性。

(2) 将结点数据域定义修改为Shape *,用链表中的每个结点表示一个具体的图形对象,创建图形对象链表,并测试其正确性。

(3) 将所建单链表中的内容写到一个文本文件中,反转单链表并再次将其内容追加到同一文本文件中,查阅其正确性。


 代码有点累赘,用了许多if,有需要的话可以改成switch。另外可以实现保存链表到txt文本,从txt文本导入链表。虽然质量不高,bug也很多,大家就多多担待吧大笑

  另外代码在cfree上编译通过的,推荐大家用cfree或mingw运行。

#include<iostream>
#include<windows.h>
#include<fstream>
using namespace std; 
class Shape
{public:virtual void showData()=0;virtual double reArea()=0;virtual double reVolume()=0;virtual void saveData()=0;virtual int reflag()=0;Shape *next;
};
class TwoDimShape:public Shape
{public:double area;virtual void showData(){}virtual void saveData(){}virtual double reArea(){return 0;}virtual int reflag(){return 0;}
};
class ThreeShape:public Shape
{public:double area;double volume;virtual void showData(){}virtual void saveData(){}virtual double reArea(){return 0;}virtual double reVolume(){return 0;}virtual int reflag(){return 0;}
};
//二维派生
class Circle:public TwoDimShape//圆类
{private:double data_1;double data_2;double data_3;int flag;//area=3.14*radius*radius;public: double reVolume(){return 0;}Circle(double r){data_1=r;}void showData(){cout<<"圆的半径是: "<<data_1<<endl;}double reArea(){area=3.14*data_1*data_1;cout<<"圆的面积是:"<<area<<endl<<endl;}void saveData(){fstream save;save.open("E:\\game\\list.txt",ios::app|ios::out); save<<"0"<<endl;save<<"1"<<endl;save<<data_1<<endl;save<<area<<endl; }int reflag(){flag=1;return flag;}
};
class Elipse:public TwoDimShape//椭圆类
{private:double data_1;double data_2;double data_3;int flag;public:double reVolume(){return 0;}Elipse(double a,double m){data_1=a;data_2=m;}void showData(){cout<<"椭圆的长轴是: "<<data_1<<endl;cout<<"椭圆的短轴是: "<<data_2<<endl;}double reArea(){area=(3.14*data_1*data_2)/4;cout<<"椭圆的面积是:"<<area<<endl<<endl;}void saveData(){fstream save;save.open("E:\\game\\list.txt",ios::app|ios::out);save<<"0"<<endl; save<<"2"<<endl;save<<data_1<<endl;save<<data_2<<endl;save<<area<<endl;}int reflag(){flag=2;return flag;}
};
class Rectangles:public TwoDimShape//长方形类
{private:double data_1;double data_2;double data_3;int flag;public:double reVolume(){return 0;}Rectangles(double l,double w){data_1=l;data_2=w; }void showData(){cout<<"长方形的长是:"<<data_1<<endl;cout<<"长方形的宽是:"<<data_2<<endl;}double reArea(){area=data_1*data_2;cout<<"长方形的面积是:"<<area<<endl<<endl;}void saveData(){fstream save;save.open("E:\\game\\list.txt",ios::app|ios::out);save<<"0"<<endl;save<<"3"<<endl;save<<data_1<<endl;save<<data_2<<endl;save<<area<<endl;}int reflag(){flag=3;return flag;}
};
class Triangle:public TwoDimShape//三角形类
{private:double data_1;double data_2;double data_3;int flag;public:double reVolume(){return 0;}Triangle(double b,double h){data_1=b;data_2=h;} void showData(){cout<<"三角形的底是:"<< data_1<<endl;cout<<"三角形的高是:"<< data_2<<endl;}double reArea(){area=(data_1*data_2)/2 ;cout<<"三角形的面积是:"<<area<<endl<<endl; }void saveData(){fstream save;save.open("E:\\game\\list.txt",ios::app|ios::out); save<<"0"<<endl;save<<"4"<<endl;save<<data_1<<endl;save<<data_2<<endl;save<<area<<endl;}int reflag(){flag=4;return flag;}
};
//三维派生
class Ball:public ThreeShape//球类
{private:double data_1;double data_2;double data_3;int flag;public:Ball(double b){data_1=b;} void showData(){cout<<"球的半径是:"<< data_1<<endl;}double reArea(){area=4*data_1*data_1;cout<<"球的面积是:"<< area<<endl;}double reVolume(){volume=(4/3)*data_1*data_1*data_1;cout<<"球的体积是:"<< volume<<endl<<endl;}void saveData(){fstream save;save.open("E:\\game\\list.txt",ios::app|ios::out); save<<"0"<<endl;save<<"5"<<endl;save<< data_1<<endl;save<<area<<endl; save<<area<<endl;}int reflag(){flag=5;return flag;}
};
class Cylider:public ThreeShape//圆柱类
{private:double data_1;double data_2;double data_3;int flag;public:Cylider(double r,double h){data_1=r;data_2=h;} void showData(){cout<<"圆柱的底面半径是:"<< data_1<<endl;cout<<"圆柱的高是:"<< data_2<<endl;}double reArea(){area=(2*3.14*data_1*data_1)+(2*3.14*data_1*data_2);cout<<"圆柱的面积是:"<< area <<endl;}double reVolume(){volume=3.14*data_1*data_1*data_2;cout<<"圆柱的体积是:"<< volume<<endl<<endl;}void saveData(){fstream save;save.open("E:\\game\\list.txt",ios::app|ios::out);save<<"0"<<endl; save<<"6"<<endl;save<<data_1<<endl;save<<data_2<<endl;save<<area<<endl; save<<area<<endl;}int reflag(){flag=6;return flag;}
};
class RectangularParallelepiped:public ThreeShape//长方体类
{private:double data_1;double data_2;double data_3;int flag;public:RectangularParallelepiped(double l,double w,double h) {data_1=l;data_2=w;data_3=h;}void showData(){cout<<"长方体的长是:"<<data_1<<endl;cout<<"长方体的宽是:"<<data_2<<endl; cout<<"长方体的高是:"<<data_3<<endl;}double reArea(){area=2*(data_1*data_2+data_1*data_3+data_2*data_3) ;cout<<"长方体的面积是:"<<area<<endl;} double reVolume(){volume=data_1*data_2*data_3;cout<<"长方体的体积是:"<<volume<<endl<<endl; }void saveData(){fstream save;save.open("E:\\game\\list.txt",ios::app|ios::out);save<<"0"<<endl;save<<"7"<<endl; save<<data_1<<endl;save<<data_2<<endl;save<<data_3<<endl;save<<area<<endl; save<<area<<endl;}int reflag(){flag=7;return flag;}
};void creatlist(Shape * & head,int n)//创建链表
{ int creat_judge=0;int creat_num=0;//创建节点数量Shape *move=NULL;Shape *p=NULL;//用于创建每个链表 for(creat_num=1;creat_num<=n;creat_num++){cout<<"1 建立圆形的链表"<<endl<<"2 建立椭圆形的链表"<<endl<<"3 建立长方形的链表"<<endl<<"4 建立三角形的链表"<<endl<<"5 建立球体的链表"<<endl<<"6 建立圆柱体的链表"<<endl<<"7 建立长方体的链表"<<endl;cout<<"当每个图形输入数据为0时退出!"<<endl;cout<<endl<<"请输入你的选择:";cin>>creat_judge;if(creat_judge==0){cout<<"输入错误,请从新输入:"; cin>> creat_judge;} if(creat_judge==1){double data;cout<<"请输入半径:";cin>>data;if(data==0){return;}p=new Circle(data);p->reArea();}else if(creat_judge==2){double data1;double data2;cout<<"请输入长轴:";cin>>data1;if(data1==0){return;}cout<<"请输入短轴:";cin>>data2;if(data2==0){return;}p=new Elipse(data1,data2);p->reArea();}else if(creat_judge==3){double data1;double data2;cout<<"请输入长:";cin>>data1;if(data1==0){return;}cout<<"请输入宽:";cin>>data2;if(data2==0){return;}p=new Rectangles(data1,data2);p->reArea();}else if(creat_judge==4){double data1;double data2;cout<<"请输入底边:";cin>>data1;if(data1==0){return;}cout<<"请输入高:";cin>>data2;if(data2==0){return;}p=new Triangle(data1,data2);p->reArea();}else if(creat_judge==5){double data1;cout<<"请输入半径:";cin>>data1;if(data1==0){return;}p=new Ball(data1);p->reArea();p->reVolume(); }else if(creat_judge==6){double data1;double data2;cout<<"请输入底面半径:";cin>>data1;if(data1==0){return;}cout<<"请输入高:";cin>>data2;if(data2==0){return;}p=new Cylider(data1,data2);p->reArea();p->reVolume();}else if(creat_judge==7){double data1;double data2;double data3;cout<<"请输入长:";cin>>data1;if(data1==0){return;}cout<<"请输入宽:";cin>>data2;if(data2==0){return;}cout<<"请输入高:";cin>>data3;if(data3==0){return; }p=new RectangularParallelepiped(data1,data2,data3);p->reArea();p->reVolume();}p->next=NULL;if(head==NULL){head=p;move=p;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_BLUE);cout<<'\n'<<"第"<<creat_num<<"个链表创建成功!"<<'\n'<<endl;if(creat_num<n) {cout<<"您现在正在创建第"<<(creat_num)+1<<"个链表"<<'\n'<<endl;} SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);}else{move->next=p;move=p;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_BLUE);cout<<'\n'<<"第"<<creat_num<<"个链表创建成功!"<<'\n'<<endl;if(creat_num<n) {cout<<"您现在正在创建第"<<(creat_num)+1<<"个链表"<<'\n'<<endl;} SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN); }}}void browselist(Shape *head)//遍历链表 
{if(head==NULL){cout<<endl;cout<<"您还没有建立链表呦~"<<endl<<endl;return; } Shape *browse=NULL;browse=head;while(browse!=NULL){browse->showData();browse->reArea();browse->reVolume(); browse=browse->next;}delete browse;
}
void insertlist(Shape * & head)//插入		第n个数据后插入数据 
{if(head==NULL){cout<<endl;cout<<"您还没有建立链表呦~"<<endl<<endl;return; } int insert_num;int select_num;int i; Shape *p=NULL;Shape *judge=head;//判断插入的合法性cout<<"在第__个链表后插入?"; cin>>insert_num;for(i=2;i<=insert_num;i++)//判断插入的合法性{judge=judge->next;}if(judge==NULL){cout<<'\n'<<"不合法的插入!"<<endl;return;}cout<<endl;cout<<"1 插入圆形的链表"<<endl<<"2 插入椭圆形的链表"<<endl<<"3 插入长方形的链表"<<endl<<"4 插入三角形的链表"<<endl<<"5 插入球体的链表"<<endl<<"6 插入圆柱体的链表"<<endl<<"7 插入长方体的链表"<<endl<<"当输入数据为0时退出!"<<endl;cout<<endl<<"请输入你的选择:";cin>>select_num;if(insert_num==0)//如果在头结点插入 {if(select_num==1){int data1;cout<<"请输入半径:";cin>>data1;if(data1==0){return;}p=new Circle(data1);p->reArea();p->next=head;head=p;cout<<"数据成功插入!"<<endl;}else if(select_num==2){int data1;int data2;cout<<"请输入长轴:";cin>>data1;if(data1==0){return;}cout<<"请输入短轴:";cin>>data2; if(data2==0){return;}p=new Elipse(data1,data2);p->reArea();p->next=head;head=p;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_BLUE);cout<<"数据成功插入!"<<endl;}else if(select_num==3){int data1;int data2;cout<<"请输入长:";cin>>data1;if(data1==0){return;}cout<<"请输入短宽:";cin>>data2; if(data2==0){return;}p=new Rectangles(data1,data2);p->reArea();p->next=head;head=p;cout<<"数据成功插入!"<<endl;}else if(select_num==4){int data1;int data2;cout<<"请输入底:";cin>>data1;if(data1==0){return;}cout<<"请输入高:";cin>>data2; if(data2==0){return;}p=new Triangle(data1,data2);p->reArea();p->next=head;head=p;cout<<"数据成功插入!"<<endl;}else if(select_num==5){int data1;cout<<"请输入半径:";cin>>data1;if(data1==0){return;}cout<<"请输入高:";p=new Ball(data1);p->reArea();p->reVolume();p->next=head;head=p;cout<<"数据成功插入!"<<endl;}else if(select_num==6){int data1;int data2;cout<<"请输入底面半径:";cin>>data1;if(data1==0){return;}cout<<"请输入高:";cin>>data2; if(data2==0){return;}p=new Cylider(data1,data2);p->reArea();p->reVolume();p->next=head;head=p;cout<<"数据成功插入!"<<endl;}else if(select_num==6){int data1;int data2;int data3; cout<<"请输入长:";cin>>data1;if(data1==0){return;}cout<<"请输入宽:";cin>>data2; if(data2==0){return;}cout<<"请输入高:";cin>>data3; if(data3==0){return;}p=new RectangularParallelepiped(data1,data2,data3);p->reArea();p->reVolume();p->next=head;head=p;cout<<"数据成功插入!"<<endl;}}else//如果不在头结点插入 {Shape *m;//用于指向到指定的链表位置 int i=0;//用于循环到指定的链表位置 m=head;for(i=1;i<insert_num;i++) {m=m->next; }if(select_num==1){int data1;cout<<"请输入半径:";cin>>data1; if(data1==0){return;}p=new Circle(data1); p->reArea();p->next=m->next; m->next=p;cout<<"数据成功插入!"<<endl;} else if(select_num==2){int data1;int data2; cout<<"请输入长轴:";cin>>data1;if(data1==0){return;}cout<<"请输入短轴:";cin>>data2;if(data2==0){return;}p=new Elipse(data1,data2);p->reArea();p->next=m->next; m->next=p;cout<<"数据成功插入!"<<endl;} else if(select_num==3){int data1;int data2; cout<<"请输入长:";cin>>data1;if(data1==0){return;}cout<<"请输入宽:";cin>>data2;if(data2==0){return;}p=new Rectangles(data1,data2);p->reArea();p->next=m->next; m->next=p;cout<<"数据成功插入!"<<endl;}else if(select_num==4){int data1;int data2; cout<<"请输入底:";cin>>data1;if(data1==0){return;}cout<<"请输入高:";cin>>data2;if(data2==0){return;}p=new Triangle(data1,data2);p->reArea();p->next=m->next; m->next=p;cout<<"数据成功插入!"<<endl;} else if(select_num==5){int data1;cout<<"请输入半径:";cin>>data1;if(data1==0){return;}p=new Ball(data1);p->reArea();p->reVolume();p->next=m->next; m->next=p;cout<<"数据成功插入!"<<endl;} else if(select_num==6){int data1;int data2; cout<<"请输入底面半径:";cin>>data1;if(data1==0){return;}cout<<"请输入高:";cin>>data2;if(data2==0){return;}p=new Cylider(data1,data2);p->reArea();p->reVolume();p->next=m->next; m->next=p;cout<<"数据成功插入!"<<endl;} else if(select_num==7){int data1;int data2; int data3; cout<<"请输入底面长:";cin>>data1;if(data1==0){return;}cout<<"请输入宽:";cin>>data2;if(data2==0){return;}cout<<"请输入高:";cin>>data3;if(data3==0){return;}p=new RectangularParallelepiped(data1,data2,data3);p->reArea();p->reVolume();p->next=m->next; m->next=p;cout<<"数据成功插入!"<<endl;} } 
} 
void deletelist(Shape * & head)
{if(head==NULL){cout<<endl;cout<<"您还没有建立链表呦~"<<endl<<endl;return; } int delete_sel; //删除节点的位置 int delete_num;//选择删除指定相同的节点 int j=0;//用于选择删除指定相同的节点 Shape *d,*e,*f;//用于指向到指定的链表位置的前一位 d=head;cout<<"1 删除圆形的节点"<<endl<<"2 删除椭圆形的节点"<<endl<<"3 删除长方形的节点"<<endl<<"4 删除三角形的节点"<<endl<<"5 删除球体的节点"<<endl<<"6 删除圆柱体的节点"<<endl<<"7 删除长方体的节点"<<endl<<"当输入数据为0时退出!"<<endl;cout<<endl<<"请输入你的选择:"; cin>>delete_sel;if(delete_sel>7){cout<<"不合法输入";return; }cout<<"删除此图形的第几个数据?"; cin>> delete_num;for(j=0;j<delete_num;j++){f=d; for(;d->reflag()!=delete_sel;) {f=d;d=d->next; }if((j+1)!=delete_num){d=d->next;}} if(d==head){head=head->next;delete d; cout<<'\n'<<"删除成功!"<<endl;}else{e=f->next;f->next=f->next->next;delete e; cout<<'\n'<<"删除成功!"<<endl;}/*if(delete_num==0){cout<<"第1个节点才是头结点,请从新输入:"; cin>>delete_num;}else if(delete_num==1){head=head->next;delete d; cout<<'\n'<<"删除成功!"<<endl; }else if(delete_num>1 && delete_num<999){for(j=2;j<delete_num;j++){d=d->next; }e=d->next;d->next=d->next->next;delete e; cout<<'\n'<<"删除成功!"<<endl; }*/
}
void turnlist(Shape * & head)//翻转链表
{if(head==NULL){cout<<endl;cout<<"您还没有建立链表呦~"<<endl<<endl;return;}Shape *t1=NULL;Shape *t2=NULL; Shape *t3=NULL;//三个配合来翻转t1=head;t2=t1->next;t3=t2->next;t1->next=NULL; for(;t3!=NULL;){t2->next=t1;t1=t2;t2=t3;t3=t3->next;} if(t3==NULL){t2->next=t1;delete t3;head=t2;}SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_BLUE);cout<<'\n'<<"链表反转成功!"<<'\n'<<endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN); 
} 
void savelist(Shape * & head)
{if(head==NULL){cout<<endl;cout<<"您还没有建立链表呦~"<<endl<<endl;return; } Shape *browse=head;while(browse!=NULL){browse->saveData(); browse=browse->next;}delete browse;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_BLUE);cout<<endl<<"导出到文本成功!"<<endl<<endl; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
}
void readlist(Shape * & head)
{head=NULL;fstream read;read.open("E:\\game\\list.txt",ios::in);double m[9999];//文本数据存储 int i,j;int judge;//只是个判断,不用定义为int Shape *p=NULL;Shape *move=NULL; for(i=0;!read.eof();i++){read>>m[i];	//m[i+1]=0; }   for(j=0;j<i-1;j++){if(m[j]==0)	{ if(m[j+1]==1){double data1;data1=m[j+2];p=new Circle(data1); }else if(m[j+1]==2){double data1;double data2;data1=m[j+2];data2=m[j+3];p=new Elipse(data1,data2);}else if(m[j+1]==3){double data1;double data2;data1=m[j+2];data2=m[j+3];p=new Rectangles(data1,data2);}else if(m[j+1]==4){double data1;double data2;data1=m[j+2];data2=m[j+3];p=new Triangle(data1,data2);}else if(m[j+1]==5){double data1;data1=m[j+2];p=new Ball(data1);}else if(m[j+1]==6){double data1;double data2;data1=m[j+2];data2=m[j+3];p=new Cylider(data1,data2);}else if(m[j+1]==7){double data1;double data2;double data3;data1=m[j+2];data2=m[j+3];p=new RectangularParallelepiped(data1,data2,data3);}} //p->next=NULL;if(head==NULL){head=p;//move=p;}else{move->next=p;//move=p;}move=p;p->next=NULL;}
}int main()
{SetConsoleTitle("图形链表录入系统     CREATED BY 刘麒   2013.8");//设置标题SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);int data_num;//链表个数int menu_sel;//菜单选择 Shape *head=NULL;void creatlist(Shape * & head,int n);void browselist(Shape *head);void insertlist(Shape * & head);void deletelist(Shape * & head);void turnlist(Shape * & head);void savelist(Shape * & head);void readlist(Shape * & head);while(1) {cout<<"■■■■■■■■■■■■■■" <<endl;cout<<"■1  创建链表		  ■"<<endl<<"■2  遍历链表		  ■"<<endl<<"■3  插入链表		  ■"<<endl<<"■4  删除链表		  ■"<<endl<<"■5  反转链表		  ■"<<endl<<"■6  存储链表到txt文件	  ■"<<endl<<"■7  查看链表文件	  ■"<<endl<<"■8  从txt文本中导入链表  ■"<<endl<<"■9  安全退出		  ■"<<endl;cout<<"■  !链表只可创建一次!  ■"<<endl; cout<<"■■■■■■■■■■■■■■" <<endl;cout<<"请输入你的选择:"; cin>>menu_sel; //int showsystime();//showsystime();if(menu_sel==9){return 0;} else if(menu_sel==1){if(head!=NULL){cout<<endl<<"!链表只可创建一次!"<<endl<<"程序已退出!"<<endl;return 0;}cout<<"请输入需要创建节点个数:"; cin>>data_num;cout<<endl;if(data_num==0) {cout<<"您没有创建链表,程序退出!"<<endl; return 0;}creatlist(head,data_num); } else if(menu_sel==2) {browselist(head);}else if(menu_sel==3){insertlist(head); }else if(menu_sel==4){deletelist(head); }else if(menu_sel==5){turnlist(head);}else if(menu_sel==6){savelist(head);} else if(menu_sel==7){system("E:\\game\\list.txt"); } else if(menu_sel==8){readlist(head);}} 
}



这篇关于c++小学期的实验二的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039437

相关文章

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元