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

相关文章

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的