c++备忘笔记.docx
- 文档编号:27133718
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:11
- 大小:19.51KB
c++备忘笔记.docx
《c++备忘笔记.docx》由会员分享,可在线阅读,更多相关《c++备忘笔记.docx(11页珍藏版)》请在冰豆网上搜索。
c++备忘笔记
C++程序开头一般会写注释
//******
/*
程序名字:
作者:
功能:
时间:
*/
C++程序开头有
Usenamespacestd;
结构体的定义和初始化
Struct结构体名
{
数据类型1变量名1;
数据类型2变量名2;
。
。
。
。
。
。
。
。
数据类型n变量名n;
};
例如定义一个有关学生xiaoqiang的结构体
Structstudent
{
Stringstuname;
Intstunum;
Intstuage;
Charstusex;
Floatstuheight;
Stringstudepartment;
}xiaoqiang;
初始化
Studentxiaoqiang={“小强”,201005412,20,‘M’,1.75,“soft-engineer”};
结构体可同时定义两个包括的结构体例如
structContact//结构类型练习方式
{stringtelephone;//电话
stringe_mail;//邮箱
};
structResume
{Contactcontact;//练习方式
Evaluationevaluation;//评价
};//这个结构体可以写成Resume.Contact.telephone(e_mail)
在编程环境中等于号为“==”而不是赋值的“=”
编程环境中输出cout<<在之后的引号“”中可以包含\t含义为(空出一个字节)
Switch语句中case后添加冒号
Case与case之间不能用||连接
给一个变量输入一个字符用_c=getch()不是其他不能写成c=getchar()
system("cls");这个语句表示在弹出的框框中清空原来用有的文字使得框框看起来整洁、美观。
#include
structstudent
{
intnum;
charname[20];
floatscore1,score2,sum,average;
};
voidmain()
{
structstudentstu[5];inti;
for(i=0;i<5;i++)
{printf("请依次输入第%d个学生的学号,姓名,和两门成绩:
",i+1);scanf("%d%s%f%f",&stu[i].num,stu[i].name,&stu[i].score1,&stu[i].score2);stu[i].sum=stu[i].score1+stu[i].score2;stu[i].average=stu[i].sum/2;
}
printf("学号姓名成绩总成绩平均成绩\n");
for(i=0;i<5;i++)printf("%d%s%.2f%.2f%.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].sum,stu[i].average);
}
以上为结构体数组的例子,
结构体数组可以按此来想,学生为结构体名,内有学好,姓名等变量名,学生还可以设置一个数组,来有多个学生。
定义一个常量#definepi3.1415926
指向常量数据的指针consrint*ptr=x
指向数据的常量指针int*constptr=x
指向常量数据的常量指针constint*constptr=x
指向非常量数据的非常量指针int*ptr=x
链表定义
Structnode
{intdata;
Node*link;
};
链表声明
Node*head,*p,*q;
链表赋值
P=newdata;
p->data=20;
head=p;
q=newdata;
q->data=30;
p->link=q;
q->link=NULL;
链表遍历
For(node*p=head;p!
=NULL;p=p->link)
在类内定义构造函数并初始化《注意》构造函数必须与类名字相同
Classrectangle
{public:
Rectangle()
{length=1;width=1;}
Intarea();
Intperimeter();
Intgetlength();
Voidsetlength(intlen)
Intgetwidth();
Voidsetwidth(intwid)
Private:
intlength,width;
};
还可以在类内对构造函数声明,在类外定义构造函数
Classrectangle
{public:
Rectangle()
……//与其他相同
Private:
intlength,width;
};
rectangle:
:
rectangle()
{length=1;width=2;}
Intrectangle:
:
area()
{returnlength*width;}
……//与其他相同
}
带参数的构造函数
Classrectangle
{public:
rectangle(intlen,intwid)
{length=len;width=wid;}
……
Private:
intlength;width;
}
……此处代码与例8.3同
Intmain()
{Rectangler1(1,2);
Rectangler2(4,5);//在类外构造函数初始化
……//其他相同
}
用参数初始化表对数据成员初始化
Rectangle(intlen,intwid):
length(len),width(wid){}
初始化按这个写Rectangler1(1,3)//定义长宽分别为XX的矩形
构造函数重载:
一个类中可以有多个构造函数,他们的名字都相同,但可以有不同的参数个数与参数类型,这就叫做构造函数的重载。
{Rectangle()
{length=1;width=1;}//无参构造函数
Rectangle(intlen,intwid):
length(len),width(wid){}//有参…
}
初始化的时候这样Rectangler1;
Rectangler2(3,4)
使用默认参数值的构造函数
Rectangle(intlen=1;intwid=2)
{length=len;width=wid;}
初始化:
Rectangler1;//定义长1宽2的矩形
Rectangler2(4);//定义长4宽2的矩形Rectangler3(2,3)//定义长2宽3的矩形。
如果某个参数没有默认值,那么它左面的所有参数都不能有默认值
所以下面声明是错误的
Rectangle(intlen=1,intwid)
析构函数
在类名前加~~符号是位取反运算符
析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。
析构函数不返回任何值,没有函数类型,也没有函数参数,一个类中可以有多个构造函数,但是只能有一个析构函数。
~Rectangle()//调用析构函数
{cout<<”调用析构函数,该矩形对象消亡!
”< //析构函数后面可以跟用户指定的输出语句,这样在执行完析构函数后,程序就会输出指定的语句。 公有数据的保护手段《const》 静态数据成员是一种特殊的数据成员,以static开头。 他可以在多个对象之间实现数据共享,又不用全局对象。 时间标记类TimeStamp 面向对象程序设计有三个主要特点: 继承,封装,多态 派生类拥有基类的全部成员,包括其所有属性和方法。 初次之外,派生类还可以扩充个新的数据成员和成员函数。 注意: 派生类中的成员函数不能访问基类中private成员。 单继承声明格式如下: Class派生类名: 继承方式基类名 {//派生类中新增加的成员 }; 多继承声明格式如下: Class派生类名: 继承方式1基类名1,继承方式2基类名2,…… {//派生类中新增加的成员 }; 派生类接受基类成员后,可对其控制,主要表现有二 一: 通过定义继承方式,对派生类成员的权限进行控制 二: 可对基类数据成员或者成员函数进行覆盖。 在数据成员可直接替换,但是在成员函数则不仅要求函数名相同,函数的参数列表(参数个数和参数类型)也应相同。 如果不同,则会发生函数重载而不是函数覆盖。 派生类的继承方式有三种: private,public,protected.如果省略继承方法,则默认为private继承。 Private继承不改变所有成员的访问级别。 只有基类的成员函数可以访问,其他都不能访问(包括继承类和类外函数) Protected成员同时为基类及派生类的保护成员,两者的成员函数都可以访问,但是类外的函数不能访问 Public成员同时为基类和派生类的公有成员,可通过派生类对象或者派生类对象的地址来访问。 大多数情况下,都采用public方式继承。 Private派生被称为实现继承,它把基类的所有公有成员都变为自己的私有成员,因此,派生类将不再支持基类的公有接口,而只是重用基类的实现。 Protected派生把…变成protected,以此来保护基类的所有接口不被外界访问,只能由自身以及自身的派生类访问。 派生类的构造函数和析构函数 因为声明派生类时并没有把基类的构造函数继承过来,所以对其初始化要由派生类的构造函数实现。 派生类构造函数的首行写法为: FlyBug: : FlyBug(intlegs,intcolor,intwings): Bug(legs,color) 一般形式为: 派生类名: : 派生类名(arg_derive-list): 基类名(arg_base-list) {//派生类中新增的数据成员的初始化语句}76 派生必须符合常识逻辑。 多态性是在指继承中,基类和派生类中具有不同功能的的函数可以用同一个函数签名,这样可以用一个函数签名调用不同内容的函数。 所以C++里面有了虚函数,虚函数的作用: 是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或者引用来访问基类和派生类的同名函数。 在派生类的基类部分中,派生类的虚函数取代了基类原来的虚函数,因此只有在基类指针指向派生类对象后,调用虚函数时就调用了派生类的虚函数,只有用virtual声明了虚函数后才具有以上功能。 基类中定义虚函数 Class类名 {public: Virtual函数返回值类型虚函数名(形参表) {函数体} }; 定义了虚函数后,可以在基类的派生类中对虚函数重新定义,其一般形式如下: Class派生类名: public基类名 { Public: Virtual函数返回值类型虚函数名(形参表) {函数体} }; Virtual关键字只用在类定义里的函数声明中,如果虚函数在类声明之外定义,关键字virtual仅在函数声明时需要,不需要在函数定义中使用。 构造函数不能是虚函数,但析构函数可以是。 如果基类有一个指向动态分配内存的数据成员,并定义了负责释放这块内存的析构函数,就应该将这个析构函数声明为虚函数。 纯虚函数,在virtual定义虚函数后,加个“=0;” 运算符重载 函数类型operator运算符名称(形参列表) {/*对运算符的重载处理*/} Complexoperator+(constComplex&a,constComplex&b) 数据成员的访问限定为public,如果把其限定为private,普通函数是不能直接访问数据成员的。 所以要用到 友元函数: ClassC {//…… Friendintf(); //…… }; 宏定义: #definemyMax(Input1,Input2)((Input1>Input2)? Input1: Input2) 函数模版 template TmyMax(Input1,Input2) {return(Input1>Input2)? Input1: Input2;} 函数模版一般格式 template <返回类型><函数名>(形参表) {//函数定义体}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 备忘 笔记