c++总结

C++课程设计

姓 名:班 级:

学 号:

指导教师:

一 实训选题

人事考勤系统

二 实训设计作品内容

这次的课程设计,我们需要做一个人事考勤系统的登录界面及主界面和三个子界面。完成各个界面之间的跳转。

三 设计中遇到的问题及解决方案

在本次制作中,由于经验不足。在制作页面的跳转中不是太懂,因为本次只是制作页面,不用代码编写,所以有些页面制作比较麻烦。在像老师请教及自己查阅资料后终于把这个问题给解决掉。在给界面导入图片是不知如何导入,在我多方面的请教下终于知道如何导入。通过这些问题我知道了有些平时不注意的小细节也是很重要的。只有平时细心才能制作好每一个作品。

四 作品的优点及不足

近两个星期的实训将要结束了,我的作品也完成了。其中的酸甜苦辣我会在今后的日子里不断地去咀嚼,去回味,去探索。从制作考勤系统的过程中,我学到了如何进行页面跳转的方法,运用了以前未运用的技巧。这使我学到了更多的知识,并且为我自己在制作这方面积累了一些经验。这些将是我人生中的一次重要的经历,将是我今后走上社会后的一笔巨大的财富。这次实习的收获对我来说有不少,我自己感觉在知识、技能等方面都有了不少的收获。总体来说这次是对我的综合素质的培养,锻炼和提高。但是本次课程设计,我感觉我的作品基本上没有什么优点。也就是简单的把各个界面制作出来,然后实现跳转。在制作跳转时还是做了好久才完成。不足在于制作过于简单,各个界面设置不是很合理,有些界面只是一个简单的几个按钮。整体不够美观。希望以后努力,争取下次做好。

五 对实训的意见及建议

通过这次课程设计的完成,使我对自己所学知识进一步的了解,同时通过实践发现自己的不足,对知识的掌握及运用存在诸多的不完善。本系统也存在着很多不足,如系统十分简单,实现功能也不够完善。所以在今后的学习中我会继续努力,完善自我。在本次的实训中我感觉实训的时间有点短,有些设计是需要时间来思考的,但两天的时间过于短,由许多的功能无法实现及更改,希望学校加长对实训时间的延长。还有就是实训环境简陋,实训室没办法上网,有些东西不会而无法及时的上网查询。希望领导能够改善。对于建议,希望领导能给实训室装上风扇,最好能装上空调。

 

第二篇:c++总结

名词解释:

继承:继承机制是面向对象程序设计代码可以复用的最重要的手段之一,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。 多态性:指同样一个消息被不同对象接收时产生的不同的结果。实现“同一接口,多种方法”。运行时多态通过定义虚函数实现。多态性是面向对象程序设计的标志性特征,它包括静态的多态性和动态的多态性。 友元:某一个类的友元是可以访问该类中封装函数或者变量,但并不属于该类的函数友元可以用作两个互不相干类之间的操作。(整个类可以是另一个类的友元,友元类的每个成员函数都是另一个累得友元函数,都可访问另一个类中的保护或私有的数据成员)

友元函数:是在类中用关键字friend修饰的非成员函数,在他的函数体中可以通过对象名访问类的私有和保护成员。

封装:是隐藏对象的属性和实现细节反对外公开接口,控制在程序中属性的读和修改的访问级别。类对象作为独立的基本单元,实现了将数据和数据处理相结合的思想。是面向对象程序设计最基本的特性。 虚函数:某基类中声明为virtual并在一个或多个派生类中被重新定义的函数成员,作用:实现动态联编,也就是在程序的运行阶段动态的选择合适的成员函数,在定义了虚函数之后可以在基类的派生类中对虚函统一接和个不同定义

对象:是类的实例,是定义类后实例化的数据类型,可以和普通变量作比较。

派生:类可以从另一个类中派生过来,就称从基类派生出一个类,派 生类拥有基类的全部属性。

引用:是一种特殊的数据类型,它不是定义一个新的变量,而是给一个已经定义变量重新起一个别名,且不为引用类型变量分配内存空间,用于函数之间的数据传递。(说明符&,目的使函数参数传递过程更加灵重载:用来描述同名函数具有相同或者相似的功能,但数据类型或参数不同的函数管理操作的称呼。(关键字operator 格式:返回值类型 类名::operator重载的运算符(参数表){?})

内联:在类声明的内部声明或定义的成员函数叫内联函数,目的是为了解决程序中函数调用的效率问题。(关键字inline)

1、 基类与派生类关系:C++通过类派生的机制来支持继承。被继承的类型称为基类或者超类,而产生新的类则称为派生类或者子类。基类和派生类的集合称做类继承层次结构。更进一步地说,如果基类和派生类共享相同的公有接口,则派生类被称做类的子类型。

2、 引用声明引用时用const修饰,被声明的引用即常引用,常引用所引用的对象不能被更新,非const的引用只能绑定到普通对象,对于基本类型的数据引用则不能为数据赋值,对于类类型的引用则不能修改他的数据成员,也不能调用他的非const成员函数

3、 继承的三种方式:a、公有继承:基类的共有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可直接访问;b、有继承:基类中的公有成员和保护成员都以私有成员身份出现在派生类中,而基类的私有成员在派生类中不可直接访问;c、保护继承:积基类的公有成员保护成员都以保护成员的身份出现在派生类中而基类的私有成员不可直接访问

4、 构造函数的作用是在对象被创建时利用特点的值构造对象,将对象初始化为一个特定的状态性质,构造函数的名与类相同,没有返回值,通常被声明为公有函数。只要类中有了构造函数,编译器就会在

建立新对象的地方自动插入对构造函数调用的代码,即构造函数在对象被创建的时候将被自动调用。

5、 面向对象程序设计的特点:1封装性2继承和派生性3多态性 7、构造函数的特征:是特殊的公有成员函数。

1、函数名与类名相同。 2、构造函数无函数返回说明。 3、在程序运行时,当新的对象被建立时,该对象所属的类的构造自动被调用,该类对象生命期中也只调用这一次。 4、构造函数可以重载。

5、构造函数可以在类中定义,也可以在类外定义。

6、如果类定义中没有给出任何构造函数,则c++编译器会自动给出一个默认的构造函数:类名(void){ } 该函数只是一种标准的形式,并不做具体的初始工作。

7、为了与c语言兼容,如果类的数据成员全为公有的,也可以不用构造函数作具体的初始化,方法是在对象名后加“=”加“{ }”中顺序填入全体数据成员的初始值。

继承的作用:继承性可以简化人们对问题的认识和描述,同时还可以在开发新程序和修改原程序时最大限度地利用已有的程序,提高了程序的可重用性,从而提高了程序的修改、扩充和设计的效率。 2.访问限定符:公有的,私有的,保护的

3.类把数据(事物的属性)和函数(事物的行为—操作)封装一个整体。

4.函数定义通常在类定义的外部进行:返回值类型类名::函数名(参数表){…} ::是域解析运算符

5.创建对象的方法:1直接定义类的实例—对象,2 采用动态创建类的对象

6.模块内部各功能之间的联系称为内聚度,内聚度最高是功能组杂性

7.析构函数特征:1析构函数名与类名相同,但在前面加~ 2析构函数无函数返回类型。不带参数。3 一个类有一个且只有一个析构函数 4注销对象时,系统自动调用析构函数。 析构函数不能用exit()和abort()函数

8.在采用引用方式返回时,返回的不能是函数的局部变量,引用方式返回一般是由引用参数传递过来的变量,其次是全局变量 9.Const可以实现不可寻址的值的引用,当const引用作为形参时,实参也能使用不可寻的地址,并进行类型转换

10.静态类成员:由关键字static修饰说明的类成员。数据成员的存储空间是在编译时分配的,在定义对象时不再为静态成员分配空间 11.编制派生类的步骤:1、吸收基类成员 2、改造基类成员 3、发展新成员4、重写构造函数与析构函数

12.派生类构造函数执行次序:1、调用基类构造函数 2、调用新增成员对象的构造函数 3、派生类的构造函数体中的操作 析构函数执行次序与构造函数相反

13.作用域分辨符是不能嵌套使用,不可连续使用多个

数重新定义,在派生类中重新定义的函数具有相同的个参和形参类型,1.Class:是数据类型说明符。

活方便,和具有多样性。格式:类型&引用变量名=已定义过的变量名) 合模块。影响模块联系因素:1模块之间联结形式2模块间接口的复

14.纯虚函数格式:virtual 返回类型函数名(参数表)=0

15.抽象类是带有纯虚函数的类

16.符值兼容原则情况:1、派生类对象可以赋值给基类对象 2、派生类对象的地址赋给其基类的指针变量 3、派生类对象可以初始化基类对象的引用

编程:建立一个分数类。分数类的数据成员包括分子和分母,操作包括显示、输入、约分、通分、比较、加、减、乘、除、求相反数。分数类 temp=below*b.below; below=b.below=temp; 的定义如下:

#include<iostream> #include<cmath> using namespace std;

class fraction{

int above; //分子 int below; //分母

void reduction(); //约分 void makeCommond(fraction&); //通分 public:

fraction(int a=0,int b=1){ //构造函数 above=a;below=b; }

fraction add(fraction); //两分数相加 fraction sub(fraction); //本分数减去分数 fraction mul(fraction); //两分数相乘 fraction div(fraction); //本分数除以实参分数 fraction reciprocal(); //求倒数 bool equal(fraction); //等于运算 boolgreaterThan(fraction); //大于运算 boollessThan(fraction); //小于运算 void (); //显示分数 void input(); //输入分数 };

void fraction::reduction(){ //约分先求最大 inta,b,temp; if(below<0){ above=-above; below=-below; }

a=abs(above); b=abs(below);

while(a%b){ //欧几里德法求最大公约数 temp=a; a=b; b=temp%b; } above/=b; below/=b; }

void fraction::makeCommond(fraction& b){ int temp; reduction(); b.reduction(); above*=b.below; b.above*=below;

}

fraction fraction::add(fraction b){ fraction temp;

makeCommond(b); //通分 temp.above=above+b.above; temp.below=below;

temp.reduction(); //约分 return temp; }

fraction fraction::sub(fraction b){ fraction temp;

makeCommond(b); //通分 temp.above=above-b.above; temp.below=below;

temp.reduction(); //约分 return temp; }

fraction fraction::mul(fraction b){ fraction temp;

temp.above=above*b.above; temp.below=below*b.below; temp.reduction(); //约分 return temp; }

fraction fraction::div(fraction b){ fraction temp; if(b.above==0){

cout<<"零不能作除数!"<<endl; exit(1); }

temp.above=above*b.below; temp.below=below*b.above; temp.reduction(); //约分 return temp; }

fraction fraction::reciprocal(){ fraction temp; temp.above=below; temp.below=above;

temp.reduction(); //约分 return temp; }

bool fraction::equal(fraction b){ makeCommond(b); //通分 return(above==b.above); }

bool fraction::greaterThan(fraction b){ makeCommond(b); //通分

return(above>b.above); }

bool fraction::lessThan(fraction b){ makeCommond(b); //通分 return(above<b.above); }

void fraction::(){ reduction(); //约分

cout<<"为:"<<above<<"/"<<below<<endl; }

void fraction::input(){ while(1){

cout<<"请顺序输入分子和分母(整数):"<<endl; cin>>above>>below;

if(below==0) cout<<"分母不可为零!"<<endl; else{ reduction(); return; } } } int main(){

fraction f1(-3,-5),f2(-3,5),f3(3,-7),f4,f5(8); cout<<"f1"; f1.(); cout<<"f2"; f2.display(); cout<<"f3"; f3.display(); cout<<"f4"; f4.display(); cout<<"f5"; f5.display();

if(f1.greaterThan(f2)) cout<<"f1>f2"<<endl; if(f2.lessThan(f3)) cout<<"f2<f3"<<endl; if(f1.equal(f1)) cout<<"f1==f1"<<endl; f4=f1.add(f3);

cout<<"f4=f1+f3"; f4.display(); f4=f1.sub(f2);

cout<<"f4=f1-f2"; f4.display(); f4=f1.mul(f3);

cout<<"f4=f1*f3"; f4.display(); f4=f2.div(f3);

cout<<"f4=f1/f3"; f4.display(); f4=f2.reciprocal();

cout<<"f4=1/f2"; f4.display(); f4.input(); cout<<"f4"; f4.display(); return 0; }

范例:集合是具有共同属性(共性)而又能互相区别(个性)的多个成员汇集起来的整体,构成集合的每个成员称为集合的元素,元素间没有顺序关系。例如,所有的大写英文字母是一个集合,它包括26个元素:A,B,?,Z。不包含任何元素的集合称为空集。 【要求】自定义一个集合类set,采用数组存放集合的元素。自定义集合运算包括以下操作:1、判断元素elem是否为集合set的元素。2、为集合添加一个元素elem。3、从集合中删除一个元素elem。4、复制一个集合,其元素与原集合完全一样。5、显示集合中的所有元素。6、求两个集合中相同的元素,即求两个集合的交集。7、求两个集合中所有的元素,即求两个集合的并集。8、判断两个集合包含的元素是否完全相同。9、判断一个集合是否被包含在另一个集合之中,即是否为另一个集合的子集。 【程序】

#include<iostream> using namespace std; constintmaxnum=20;

enumErrCode{noErr,overflow}; class set{ char elements[maxnum]; intnum; public:

set(){num=0;}

bool Member(char); //判断元素elem是否为本集合的成员 ErrCodeAddElem(char); //将新元素elem加入本集合 void RmvElem(char); //将元素elem从该集合中删去 void Copy(set);//将实参所标识的集合中的所有元素复制到本集合中去

bool Equal(set); //判断两集合各自包涵的元素是否完全相同 void print(); //显示本集合的所有元素 set Intersect(set); //求本集合与第一参数所指出的集合的交,并作为返回值 set Union(set); //求本集合与第一参数所指出的集合的并,并作为返回值 bool Contain(set); //判断本集合是否包涵实参指出的

集合中所有的元素

};

bool set::Member(char elem){ inti;

for(i=0;i<num;i++)

if(elements[i]==elem) return true; return false;

}

ErrCode set::AddElem(char elem){ inti;

for(i=0;i<num;i++)

if(elements[i]==elem) return noErr;//集合中已有elem,不重复加入

if(num<maxnum){

elements[num++]=elem;

}

}

returnnoErr; bool set::Contain(set s){ }

int main(){ inti;

inti;

for(i=0;i<s.num;i++)

if(!Member(s.elements[i])) return false; return true;

else return overflow; //数组已满

void set::RmvElem(char elem){ inti;

for(i=0;i<num;i++) if(elements[i]==elem){ for(;i<num-1;i++) elements[i]=elements[i+1];//当删除一个元素后,所有后继元素前移一位

num--;

}

}

void set::Copy(set s){ inti;

for(i=0;i<s.num;i++) elements[i]=s.elements[i]; num=s.num; }

bool set::Equal(set s){ inti;

if(num!=s.num) return false; //元素个数不同 for(i=0;i<num;i++)

if(s.Member(elements[i])) return false; //有元素不同 return true; }

void set::print(){ cout<<"集合的元素包括:"<<endl; inti;

for(i=0;i<num;i++) cout<<elements[i]<<" "; cout<<endl; }

set set::Intersect(set s1){ inti,j; set s;

for(i=0;i<num;i++) for(j=0;j<s1.num;j++) if(elements[i]==s1.elements[j]){ s.elements[s.num++]=elements[i]; break;

}

return s;

}

set set::Union(set s1){ inti; set s; s.Copy(s1); for(i=0;i<num;i++)

s.AddElem(elements[i]); //这里忽略了集合溢出 return s; }

char ch[30]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N',

'O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d'}; set s,s1,s2,s3,s4; ErrCode b; for(i=0;i<10;i++){ b=s.AddElem(ch[i]); b=s1.AddElem(ch[2*i]); b=s2.AddElem(ch[3*i]); } cout<<"s"; s.print(); cout<<"s1"; s1.print(); cout<<"s2"; s2.print(); s3=s.Intersect(s1); s4=s.Union(s1); cout<<"s3"; s3.print(); cout<<"s4"; s4.print();

if(s3.Contain(s4)) cout<<"Set s3 contains s4"<<endl; elsecout<<"Set s3 do not contains s4"<<endl; if(s4.Contain(s3)) cout<<"Set s4 contains s3"<<endl; elsecout<<"Set s4 do not contains s3"<<endl; if(s3.Equal(s4)) cout<<"Set s3=s4"<<endl; elsecout<<"Set s3!=s4"<<endl; for(i=6;i<10;i++){ s.RmvElem(ch[i]); s1.RmvElem(ch[i]); s2.RmvElem(ch[i]); }

cout<<"删除部分元素后:"<<endl; cout<<"s"; s.print(); cout<<"s1"; s1.print(); cout<<"s2"; s2.print(); return 0;

}