当前位置:首页 > 数码 > 与设计形式-可裁减的代码-C-打造可保养 (设计与形式的关系)

与设计形式-可裁减的代码-C-打造可保养 (设计与形式的关系)

admin8个月前 (04-18)数码28

引言

C++是一种弱小的编程言语,它提供了许多工具和库以支持面向对象编程和通用编程。设计形式是一种用于处置特定疑问的经过验证的处置打算。C++的灵敏性和设计形式的广泛性相联合,为程序员提供了一种弱小的方法来构建高效、可保养和可裁减的代码。
一、C++与设计形式的相关
面向对象编程(OOP)
C++是一种面向对象的编程言语,它支持封装、承袭和多态等内围概念。设计形式通常也基于这些概念,因此C++提供了一个人造的框架来运行和成功设计形式。
代码的可保养性和可裁减性
设计形式的目的是提供可重用和可保养的处置打算。C++言语自身具备很高的可读性和可保养性,而设计形式则进一步增强了这些个性。经过经常使用设计形式,程序员可以更容易地理解和裁减代码,从而提高代码的可保养性和可裁减性。
性能和灵敏性
C++提供了对内存治理和性能的精细控制,这使得它成为须要高性能运行的现实选用。同时,经过经常使用设计形式,程序员可以更灵敏地成功复杂的配置,而不会就义性能。
二、C++中的经常出现设计形式
单例形式(SingletonPattern)
单例形式确保一个类只要一个实例,并提供一个全局访问点。在C++中,可以经常使用静态成员函数来成功单例形式。例如:
classSingleton{public:staticSingleton&getInstance(){staticSingletoninstance;//静态部分变量确保只初始化一次性returninstance;}//...其余成员函数和变量...private:Singleton(){}//私有结构函数,防止外部创立实例};
工厂形式(FactoryPattern)
工厂形式用于创立对象,暗藏对象的详细成功细节,将对象的创立与经常使用代码解耦。在C++中,可以经常使用函数或类来创立对象。例如:
classShape{public:virtualvoiddraw()=0;};classCircle:publicShape{public:voiddraw()override{/*...*/}};classRectangle:publicShape{public:voiddraw()override{/*...*/}};Shape*createShape(conststd::string&type){if(type=="circle")returnnewCircle();if(type=="rectangle")returnnewRectangle();returnnullptr;//失误处置...}
观察者形式(ObserverPattern)
观察者形式准许对象观察另一个对象的形态变动,从而智能降级自身的形态。在C++中,可以经常使用模板和指针来成功观察者形式。例如:
template<typenameT>classObserver{public:virtualvoidupdate(T&subject)=0;};template<typenameT>classSubject{public:voidregisterObserver(Observer<T>*observer){/*...*/}voidremoveObserver(Observer<T>*observer){/*...*/}voidnotifyObservers(){/*...*/}};
装璜器形式(DecoratorPattern)
装璜器形式准许灵活地给对象增加额外的配置或修正已有的配置。在C++中,可以经常使用指针和承袭来成功装璜器形式。例如:
classComponent{public:virtualvoidoperation()=0;};classDecorator:publicComponent{public:Decorator(Component*component){/*...*/}};
三、总结
C++作为一种灵敏而弱小的编程言语,与设计形式之间存在着亲密的相关。经过经常使用设计形式,程序员可以应用C++的个性来构建高效、可保养和可裁减的代码。在实践开发中,依据疑问的详细状况选用适合的设计形式,联合C++的个性和工具,可以大大提高代码的品质和开发效率。

利用你现有的c语言知识 设计开发一个简易计算器,可进行加、减、乘、除、求余运算。

#include <stdio.h> float numA = 0;float numB = 0;float temp = 0;void calc(){printf(\n); printf(======欢迎使用计算器=====);printf(\n); printf(请输入第一个数:); scanf(%lf,&numA) printf(请输入第二个数:);scanf(%lf,&numB);printf(请输入你的选择:\n1加法运算\n,2减法运算\n,3乘法运算\n,4除法运算\n,5求余运算\n,6退出系统\n);char choose = 0;scanf(%c,choose);temp = 0;switch (choose) {case 1: temp = numA + numB; break;case 2: temp = numA - numB; break;case 3: temp = numA * numB; break;case 4: temp = numA / numB; break;case 5: temp = (int)numA % (int)numB; break;case 6: (已经成功退出系统!); break;default: printf(输入错误,请重新输入!);print(\n); calc(); break;} }void login(){printf(请系统登录输入密码:);char password [100]=; scanf(%s,&password)if (password==admin) { calc();}else{ printf(你输入的系统密码不正确,请重新输入!\n); printf(\n); login();} } void main() {login();printf(结果是:%lf,temp); }

高分求C语言课程设计源代码(分不多了,全部给你们)

打造可保养

#include <string>#include <iostream>#include <time.h>#include <vector>using namespace std;class Employee//定义雇员类{public: Employee();//构造函数 virtual VEmployee(); virtual void Display()=0; int GetAge();//获取年龄 string GetName();//获取姓名protected: int Id; //职工ID号 string Name; //职工姓名 char Sex[5]; //性别 int Wage;//工资 string BirthDay; //出身年月 string WorkTime; //参加工作时间 int Age; //年龄};class Worker : public Employee//定义工人类{public: Worker(); virtual VWorker(); void Display();};class Teacher : public Employee//定义教师类{public: Teacher(); virtual VTeacher(); void Display(); string GetAcademy();private: string Academy;};Employee::Employee(){}Employee::VEmployee(){}int Employee::GetAge(){ return Age;}string Employee::GetName(){ return Name;}Teacher::Teacher() //添加教师信息 { cout<<请输入该教师的信息:<<endl; cout<<职工编号 : <<endl; cin>>Id; cout<<姓名 : <<endl; cin>>Name; cout<<性别 : <<endl; cin>>Sex; cout<<工资 : <<endl; cin>>Wage; cout<<出生时间 : (格式xxxx/xx/xx)<<endl;cin>>BirthDay; cout<<参加工作时间 : (格式xxxx/xx/xx)<<endl; cin>>WorkTime; cout<<所属院系 : <<endl; cin>>Academy; //从生日里提取出生的年份 int Pos = _first_of(/); string BirthYear; (BirthDay,0,Pos); char chBirthYear[6]; strcpy(chBirthYear,BirthDay.c_str()); //获取当前系统的年份 char NowYear[5]; time_t tnow = time(0); strftime(NowYear , 5 , %Y , localtime(&tnow)); Age = atoi(NowYear)-atoi(chBirthYear);//计算年龄 }Teacher::VTeacher(){}void Teacher::Display(){ //display()同名函数,输出教师信息cout<<职工编号 : <<Id<<endl;cout<<姓名 : <<Name<<endl;cout<<性别 : <<Sex<<endl;cout<<工资 : <<Wage<<endl;cout<<出生时间 : <<BirthDay<<endl;cout<<参加工作时间 : <<WorkTime<<endl;cout<<年龄 : <<Age<<endl;}string Teacher::GetAcademy(){ return Academy;}Worker::Worker()//添加工人信息{ cout<<请输入该工人的信息:<<endl; cout<<职工编号 : <<endl; cin>>Id; cout<<姓名 : <<endl; cin>>Name; cout<<性别 : <<endl; cin>>Sex; cout<<工资 : <<endl; cin>>Wage; cout<<出生时间 : (格式xxxx/xx/xx)<<endl; cin>>BirthDay; cout<<参加工作时间 : (格式xxxx/xx/xx)<<endl; cin>>WorkTime; //从生日里提取出生的年份 int Pos = _first_of(/); string BirthYear; (BirthDay,0,Pos); char chBirthYear[6]; strcpy(chBirthYear,BirthDay.c_str()); //获取当前系统的年份 char NowYear[5]; time_t tnow = time(0); strftime(NowYear , 5 , %Y , localtime(&tnow)); Age = atoi(NowYear)-atoi(chBirthYear);//计算年龄}Worker::VWorker(){}void Worker::Display(){//display()同名函数,输出工人信息 cout<<职工编号 : <<Id<<endl; cout<<姓名 : <<Name<<endl; cout<<性别 : <<Sex<<endl; cout<<工资 : <<Wage<<endl; cout<<出生时间 : <<BirthDay<<endl; cout<<参加工作时间 : <<WorkTime<<endl; cout<<年龄 : <<Age<<endl;}void AddTeacher(vector <Teacher> *TeaInfo)//新增老师对象{ system(color 05A); //设置当前窗口的背景色和前景色 Teacher TeaTemp; (*TeaInfo)_back(TeaTemp); }void AddWoker(vector <Worker> *WorkerInfo) //新增工人对象{ system(color 05A); Worker Wokertmp; (*WorkerInfo)_back(Wokertmp); }void DisplayAll(vector <Teacher> *TeaInfo,vector <Worker> *WokerInfo){//显示全部职工记录 system(color 05A); cout<<所有教师的信息:<<endl; vector <Teacher>::iterator pTeaInfo; for (pTeaInfo=(*TeaInfo)();(*TeaInfo)()!=1&&pTeaInfo!=(*TeaInfo)();pTeaInfo++) //如果到达vector末尾,则退出 { (*pTeaInfo)();cout<<endl; } cout<<所有工人的信息:<<endl; vector <Worker>::iterator pWorkerInfo; for (pWorkerInfo=(*WokerInfo)();(*WokerInfo)()!=1&&pWorkerInfo!=(*WokerInfo)();pWorkerInfo++)//如果到达vector末尾,则退出 {(*pWorkerInfo)();cout<<endl; } cout<<按Enter返回<<endl; getchar(); getchar();}void DisAvgTeacherAge(vector <Teacher> *TeaInfo){//查询老师平均年龄 system(color 05A); int SumAge = 0; vector <Teacher>::iterator pTeaInfo; for (pTeaInfo=(*TeaInfo)();(*TeaInfo)()!=1&&pTeaInfo!=(*TeaInfo)();pTeaInfo++)//遍历老师容器 { //如果到达vector末尾,则退出SumAge+= (*pTeaInfo)();cout<<endl; } if((*TeaInfo)()!=0)cout<<教师的平均年龄为<<SumAge/((*TeaInfo)())<<endl; else cout<<没有记录<<endl; cout<<按Enter返回<<endl; getchar(); getchar();}void DisAvgWorkerAge(vector <Worker> *WokerInfo){ system(color 05A); int SumAge = 0; vector <Worker>::iterator pWorkerInfo; for (pWorkerInfo=(*WokerInfo)();(*WokerInfo)()!=1&&pWorkerInfo!=(*WokerInfo)();pWorkerInfo++)//如果到达vector末尾,则退出 {SumAge+= (*pWorkerInfo)();cout<<endl; } if((*WokerInfo)()!=0) cout<<职工的平均年龄为<<SumAge/((*WokerInfo)())<<endl; else cout<<没有记录<<endl; cout<<按Enter键返回<<endl; getchar(); getchar();}void DelTeacher(vector <Teacher> *TeaInfo){ //用于删除老师信息 system(color 05A); bool Hflag=false; string SearchName; vector <Teacher>::iterator pTeaInfo; cout<<请输入您要删除的老师的姓名:<<endl; cout<<姓名: ; cin>>SearchName; for(pTeaInfo=(*TeaInfo)();(*TeaInfo)() != 1&&pTeaInfo!=(*TeaInfo)();pTeaInfo++)//如果到达vector末尾,则退出 { if (0==((*pTeaInfo)()))//如果找到要删除老师的姓名,则执行{ Hflag=true;//找到老师 (*TeaInfo)(pTeaInfo);//删除vector中指定的老师 continue;} } if (false==Hflag) //如果没有该老师,则执行 {cout<<没有该老师!<<endl; } cout<<按Enter返回<<endl; getchar(); getchar();}void DelWorker(vector <Worker> *WokerInfo) //用于删除工人信息{ system(color 05A); bool Hflag=false; string SearchName; vector <Worker>::iterator pWorkerInfo; cout<<请输入您要删除的工人的姓名:<<endl; cout<<姓名: ; cin>>SearchName; for(pWorkerInfo=(*WokerInfo)();(*WokerInfo)() != 1&&pWorkerInfo!=(*WokerInfo)();pWorkerInfo++)//如果到达vector末尾,则退出 {if (0==((*pWorkerInfo)())) //如果找到要删除工人的姓名,则执行{ Hflag=true; //找到工人 (*WokerInfo)(pWorkerInfo); //删除vector中指定的工人 continue;} } if (false==Hflag) //如果没有该工人,则执行 {cout<<没有该老师!<<endl; } cout<<按Enter返回<<endl; getchar();getchar();}void SearchByName(vector <Teacher> *TeaInfo,vector <Worker> *WokerInfo){//按名字查找职工信息 system(color 05A); bool Hflag=false; string SearchName; vector <Teacher>::iterator pTeaInfo; cout<<请输入您要查找的职工的姓名:<<endl; cout<<姓名: ; cin>>SearchName; for(pTeaInfo=(*TeaInfo)();pTeaInfo!=(*TeaInfo)();pTeaInfo++) {if (0==((*pTeaInfo)())) //如果找到输入的职工,则执行{ Hflag=true; //找到职工 cout<<这个人是老师,他的信息为:<<endl; (*pTeaInfo)();//显示职工信息 continue;} } vector <Worker>::iterator pWorkerInfo; for(pWorkerInfo=(*WokerInfo)();pWorkerInfo!=(*WokerInfo)();pWorkerInfo++) {if (0==((*pWorkerInfo)())) //如果找到输入的职工,则执行{ Hflag=true; //找到职工 cout<<这个人是老师,个人信息为:<<endl; (*pWorkerInfo)();//显示职工信息 continue;} } if (false==Hflag) {cout<<没有这个职工!<<endl;//没有找到信息 } cout<<按Enter返回<<endl;//返回 getchar(); getchar();}void DisTeacherByAcademy(vector <Teacher>TeaInfo){ //按系输出教师信息 system(color 05A); bool Hflag=false; string SearchName; vector <Teacher>::iterator pTeaInfo; while((TeaInfo)()!=1) { //输出所有指定系的老师pTeaInfo=(TeaInfo)();string Academy = (*pTeaInfo)(); cout<<系:<<Academy<<,<<该系的老师有:<<endl;for(pTeaInfo=(TeaInfo)();(TeaInfo)()!=1&&pTeaInfo!=(TeaInfo)();){ if (0==((*pTeaInfo)())) { (*pTeaInfo)(); cout<<endl;(TeaInfo)(pTeaInfo);pTeaInfo=(TeaInfo)(); } else pTeaInfo++;} cout<<endl; } cout<<按Enter返回<<endl; getchar(); getchar();}void WriteFile(vector <Teacher> *TeaInfo,vector <Worker> *WokerInfo)//生成新文件{ FILE *fp; if (NULL==(fp=fopen(,w+))) {cout<<打开文件错误<<endl;exit(-1); } vector <Worker>::iterator pWorkerInfo; vector <Teacher>::iterator pTeaInfo; for(pTeaInfo=(*TeaInfo)();pTeaInfo!=(*TeaInfo)();pTeaInfo++)//写入vector中所有老师的信息 {fputs(教师信息:\n,fp);fprintf(fp,姓名:%s\n,(*pTeaInfo)().c_str());fprintf(fp,年龄:%d\n,(*pTeaInfo)());fputs(\n,fp); } fputs(教师信息结束\n,fp); for(pWorkerInfo=(*WokerInfo)();pWorkerInfo!=(*WokerInfo)();pWorkerInfo++)//写入vector中所有老师的信息 {fputs(职工信息:\n,fp);fprintf(fp,姓名:%s\n,(*pWorkerInfo)().c_str());fprintf(fp,年龄:%d\n,(*pWorkerInfo)());fputs(\n,fp); } fputs(职工信息结束\n,fp); fclose(fp);}void Mainmenu(){//菜单界面system(color 05A); //设置当前窗口的背景色和前景色 cout<<╭――――――――――《教职工管理系统》―――――――――╮<<endl; cout<<∣ 请选择功能 ∣<<endl; cout<<├――――――――――――――――――――――――――――┤<<endl; cout<<∣ 1.新建并输入职工数据 ∣<<endl; cout<<∣ 2.按条件输出职工数据 ∣<<endl; cout<<∣ 3.删除职工数据 ∣<<endl; cout<<∣ 0.退出 ∣<<endl; cout<<╰――――――――――――――――――――――――――――╯<<endl; cout<< ――――――――――――――――――――――――――――――<<endl; cout<< 请选择您要服务的类别: ; }voidInsert(vector <Teacher>*TeaInfo,vector <Worker>*WorkerInfo)//增加职工数据菜单界面 {system(color 05A); //设置当前窗口的背景色和前景色int select = -1; while(select!=0) { cout<< ╭――――――――――《增加职工数据》――――――――――╮<<endl; cout<< ∣ 请选择操作:∣<<endl; cout<< ├――――――――――――――――――――――――――――┤<<endl; cout<< ∣ 1增加一位教师记录∣<<endl; cout<< ∣ 2增加一位工人记录∣<<endl; cout<< ∣ 0返回主菜单∣<<endl; cout<< ╰――――――――――――――――――――――――――――╯<<endl;cin>>select; switch(select){ case 1:AddTeacher(TeaInfo);break; case 2:AddWoker(WorkerInfo);break; case 3:Mainmenu();break; default:cout<<回到主菜单!<<endl; } }}voidSearch(vector <Teacher>*TeaInfo,vector <Worker>*WorkerInfo) //查询职工数据菜单界面{system(color 05A); //设置当前窗口的背景色和前景色int select = -1; while(select!=0) { cout<< ╭――――――――――《查询职工数据》――――――――――╮<<endl; cout<< ∣ 请选择操作:∣<<endl; cout<< ├――――――――――――――――――――――――――――┤<<endl; cout<< ∣ 1显示全部职工记录∣<<endl; cout<< ∣ 2按系输出教师信息∣<<endl; cout<< ∣ 3按姓名检索所有信息∣<<endl; cout<< ∣ 4计算教师平均年龄∣<<endl; cout<< ∣ 5计算工人平均年龄∣<<endl; cout<< ∣ 0返回主菜单∣<<endl; cout<< ╰――――――――――――――――――――――――――――╯<<endl;cin>>select; switch(select){ case 1:DisplayAll(TeaInfo,WorkerInfo);break; case 2:DisTeacherByAcademy(*TeaInfo);break;case 3:SearchByName(TeaInfo,WorkerInfo);break; case 4:DisAvgTeacherAge(TeaInfo);break; case 5:DisAvgWorkerAge(WorkerInfo);break; case 6:Mainmenu();break; default:cout<<回到主菜单!<<endl; }}}voidDelete(vector <Teacher>*TeaInfo,vector <Worker>*WorkerInfo) //删除职工数据{system(color 05A); //设置当前窗口的背景色和前景色int select = -1; while(select!=0) { cout<< ╭――――――――――《删除职工数据》――――――――――╮<<endl; cout<< ∣ 请选择操作:∣<<endl; cout<< ├――――――――――――――――――――――――――――┤<<endl; cout<< ∣ 1删除一位教师记录∣<<endl; cout<< ∣ 2删除一位工人记录∣<<endl; cout<< ∣ 0返回主菜单∣<<endl; cout<< ╰――――――――――――――――――――――――――――╯<<endl;cin>>select; switch(select){ case 1:DelTeacher(TeaInfo);break; case 2:DelWorker(WorkerInfo);break; case 3:Mainmenu();break; default:cout<<回到主菜单!<<endl; }}}void MainCho(vector <Teacher>*TeaInfo,vector <Worker>*WorkerInfo){ //主菜单操作 int choice = -1; while(choice!=0){ Mainmenu(); cin>>choice; switch(choice){ case 1:Insert(TeaInfo,WorkerInfo);break; case 2:Search(TeaInfo,WorkerInfo);break; case 3:Delete(TeaInfo,WorkerInfo);break; case 0:break; default:cout<<操作错误!<<endl; } }}void main() //主函数{ vector <Teacher> TeaInfo; // vector <Worker> WorkerInfo; // vector <Teacher>::iterator pTeacher;// vector <Worker>::iterator pWoker; // pTeacher = (); // pWoker = ();// MainCho(&TeaInfo,&WorkerInfo);//调用主要处理程序 WriteFile(&TeaInfo,&WorkerInfo);//存入文件操作}

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: C

“与设计形式-可裁减的代码-C-打造可保养 (设计与形式的关系)” 的相关文章

深化剖析-atomic-代码范例和实践运行-std-现代-中的原子-C (深化剖析整改)

深化剖析-atomic-代码范例和实践运行-std-现代-中的原子-C (深化剖析整改)

一、引言 在并发编程中,原子操作是一种无法终止的操作,即在多线程环境中,一旦开局就不会被其余线程搅扰。C++11引入了std::atomic库以支持原子操作,为并发编程提供了更为方便和高效的...

揭秘性能与并发的机密-C-多线程编程 (性能与什么有关)

揭秘性能与并发的机密-C-多线程编程 (性能与什么有关)

当天咱们将深化讨论C++中的多线程编程,提醒多线程如何解锁性能后劲,提高程序的并发性能。 什么是多线程? 在计算机迷信中,多线程是指一个进程(程序的口头实例)中的多个线程同时口头。每个...

开源项目-助初学者进阶成长-C-八个 (开源项目有什么用)

开源项目-助初学者进阶成长-C-八个 (开源项目有什么用)

通过参与或阅读开源项目的源代码,你可以获得丰富的实践机会。实际的项目代码比简单的教程更具挑战性,可以帮助你深入理解 C++ 的各种概念和技术。 ThreadPool 一个简单...

让新手也能轻松把握-C-类模板特化与承袭经常使用指南 (请问新手)

让新手也能轻松把握-C-类模板特化与承袭经常使用指南 (请问新手)

一、类模板特化 1.特化的成功 你可以为特定类型提供类模板的替代成功。例如,你或许以为constchar类型(C格调字符串)的Grid行为没无心义。Grid<constchar&...

了解圈套和无效经常使用技巧-言语变长参数-C (了解圈套和无线的区别)

了解圈套和无效经常使用技巧-言语变长参数-C (了解圈套和无线的区别)

C工具 变长参数列表 这局部解释了旧的C格调变长参数列表。了解这些内容很关键,由于你或许会在遗留代码中遇到它们。但是,在新代码中,你应该经常使用变参模板来成功类型安保的变长参数列表。...

的区别-中-C-math.h-和-cmath (的区别中的钱)

的区别-中-C-math.h-和-cmath (的区别中的钱)

一、引言 C++规范库中的<cmath>和C言语规范库中的<math.h>均为数学函数库,它们提供了一系列数学函数和常量。但是,这两者之间存在一些关键的区别...

监禁程序后劲的优化利器-C-中的内联函数 (监禁等于坐牢吗)

监禁程序后劲的优化利器-C-中的内联函数 (监禁等于坐牢吗)

一、内联函数的定义和特点 内联函数是一种不凡的函数,它经过在编译时将函数调用交流为函数体中的代码,以缩小函数调用的开支,从而提高程序的口头效率。内联函数通罕用于那些函数体较小、调用频繁的场景...