软考培训讲座5C++Word文件下载.docx
《软考培训讲座5C++Word文件下载.docx》由会员分享,可在线阅读,更多相关《软考培训讲座5C++Word文件下载.docx(38页珍藏版)》请在冰豆网上搜索。
![软考培训讲座5C++Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-11/16/2e03e973-a328-4e09-86e8-54d7155408b7/2e03e973-a328-4e09-86e8-54d7155408b71.gif)
p=newtype[size];
其中type是一个数据类型名,p是指向该类型的指针。
size是分配数量。
比如
#include<
iostream.h>
voidmain(){
int*p;
p=newint;
*p=25;
//*p是一个动态整型变量
cout<
*p<
deletep;
p=newint[6];
//p指向包含6个整型数组元素的内存区域
*(p+1)=25;
//数组元素p[1]=25
*(p+1)<
delete[]p;
}
②delete用于撤消new所分配的内存,形式为:
deletep;
或delete[]p;
(3)重载函数
重载函数:
函数名相同,参数类型或参数个数不同。
例2
intmax(inta,intb){returna>
b?
a:
b}
intmax(inta,intb,intc)
{intt=max(a,b)
returnmax(t,c)
voidmain()
{
max(2,3)<
max(2,3,8)<
(4)函数缺省参数
缺省参数就是在参数列表中给出参数的缺省值。
例如,上述例2中,2个重载函数可以合并成一个带缺省参数的求3个整数的最大数的函数,其原型为:
intmax(inta,intb,intc=-32768);
若从2个数(2,3)中求大数,使用调用表达式:
max(2,3)
若从3个数(2,3,8)中求大数,使用调用表达式:
max(2,3,8)
注意:
①缺省参数必须放在参数序列的最后。
②若一个缺省参数需要指明一个特定值,则在其之前的所有参数都必须赋值。
③重载函数和缺省参数一起使用时,要避免二义性。
例“2006年下半年软件设计师试题”
●在C++语言中,若类C中定义了一个方法intf(inta,intb),那么方法(33)不能与该方法同时存在于类C中。
(33)A.intf(intx,inty)B.intf(floata,intb)
C.floatf(intx,floaty) D.intf(intx,floaty)
2类和对象
在C++中,类是一种用户自定义的数据类型,它既包括数据(数据成员),也包括对数据的操作(成员函数),类把数据和操作封装为一个整体。
可以使用类名去说明对象(即类的实例化)。
注:
在C++中,常用的“用户自定义的数据类型”有三种:
结构型(struct)、枚举型(enum)、类(class)。
知识要点:
(1)构造函数
构造函数是类的成员函数;
其函数名与类名相同;
无返回类型;
在类的对象创建时被自动调用;
构造函数可以重载。
(2)析构函数
析构函数是类的成员函数;
其函数名与类名相同,但前面冠有~;
没有参数;
在对象的生存期结束时被自动调用;
析构函数可以缺省。
(3)拷贝构造函数(复制构造函数)
拷贝构造函数是类的成员函数;
参数的类型为“类的引用”,而且只有一个参数;
使用该类的一个对象去初始化另一个对象时被自动调用;
拷贝构造函数可以缺省。
(4)类作用域
说明类时所使用的一对花括号形成“类作用域”。
类作用域运算符为“:
:
”。
“类名:
”表示其后的成员是在“类名”中说明的。
成员名”称为“成员名限定”。
类中也可以只对成员函数进行声明(无函数体),然后在程序的其它地方定义这些成员函数的实现,函数的实现形式为:
返回类型类名:
成员函数名(参数)
{
函数体
(5)类成员的访问权限
①private:
私有成员,只有该类的成员函数可以访问。
②public:
公有成员,任何函数都可以访问。
③protected:
保护成员,在类的继承层次结构中,基类的保护成员,对派生类的成员函数而言,它是公有成员,可以被访问;
对其他函数而言,它是私有成员,不能被访问。
(6)this指针
当一个成员函数被调用时,系统自动向它传递一个隐含的指针参数,用this来表示。
该指针指向调用该函数的对象。
(7)对象成员
如果一个类的数据成员是另一个类的对象,则称该数据成员为对象成员。
对象成员的初始化必须采用“成员初始化列表”来完成。
例3
classA{
private:
intval;
public:
A(inti){val=i;
……
};
classB{
Aa1,a2;
intdata;
B(inti,intj,intk):
a1(i),a2(j){data=k;
其中冒号后由逗号隔开的项——“:
a1(i),a2(j)”即为成员初始化列表。
对基本数据类型的成员的初始化也可以在成员初始化列表中进行。
例如:
a1(i),a2(j),data(k){};
例4
classPoint
{public:
Point(intx,inty){X=x;
Y=y;
}//Point构造函数
Point(Point&
p){X=p.X;
Y=p.Y;
}//Point拷贝构造函数
voidprint(){cout<
'
('
X<
“,”<
Y<
“)”<
~Point(){}//Point析构函数
intX,Y;
{Pointp1(1,1);
p1.print();
Pointp2(p1);
p2.set(3,2);
p2.print();
上述程序先构造了一个Point类,此类中有:
两个私有成员X,Y,构造函数Point,拷贝构造函数Point,析构函数~Point,成员print。
在主函数中,定义了两个对象p1和p2。
例5“2006年下半年程序员试题”
●类的构造函数被自动调用执行的情况发生在定义该类的(42)时。
(42)A.成员函数 B.数据成员 C.对象 D.友元函数
例6“2005年下半年程序员试题”P10(6)
[说明]
类Stock的定义中有三处错误,分别在代码的第04、06、10行。
请补齐下述代码中的空缺1,修改错误并给处修改后该行的完整代码,最后完善程序运行后的输出结果。
[C++代码]
01#include<
iostream>
02usingnamespacestd;
03classStock{
04protected:
05 Stock(){shares=0;
share_val=0.0;
Output();
}
06Stock(intn=0,doublepr=3.5):
(1){//初始化shares值为n
07 share_val=pr;
08 Output();
09 };
10void~Stock(){};
11voidOutput(){cout<
shares<
<
share_val<
endl;
}
12public:
13 //成员函数
14private:
15 //成员变量
16 intshares;
17 doubleshare_val;
18};
19
20voidmain(){//构造三个Stock对象a,b,c
21 Stocka
(1);
22 Stockb;
23 Stockc=Stock();
24 //其他代码省略,且代码无输出
25}
程序运行后的输出结果为:
1:
3.5
_____
(2)_____
_____(3)_____
3继承和派生类
继承是父类和子类之间共享数据和方法的机制。
一个子类可以继承它的父类中的属性和操作,子类还可以定义自己的属性和操作。
在一个面向对象系统中,子类和父类之间的继承关系构成了这个系统的类层次结构。
在C++中,父类称为基类,子类称为派生类。
知识要点:
(1)公有派生的访问权限:
①基类的公有成员在派生类中是公有的。
②基类的保护成员在派生类中是保护的。
③基类的私有成员在派生类中是不可以访问的。
(2)私有派生的访问权限:
①基类的公有成员在派生类中是私有的。
②基类的保护成员在派生类中是私有的。
③基类的私有成员在派生类中是不可以访问的
(3)保护派生的访问权限:
①基类的公有成员在派生类中是保护的。
●注意:
访问权限为公有的,在类内和(在类外建立的)类的对象都可以访问;
访问权限为保护的,在类内可以访问,但类的对象不可以访问;
访问权限为私有的,在类内可以访问,但类的对象不可以访问。
例7“2006年上半年软件设计师试题”
●已知3个类O、P和Q,类O中定义了一个私有方法F1、一个公有方法F2和一个受保护的方法F3:
类P和类Q是类O的派生类,其继承方式如下所示:
classP:
protectedO{…};
classQ:
publicO{…};
关于方法F1的描述中正确的是(34);
关于方法F2韵描述中正确的是(35);
关于方法F3的描述中正确的是(36)。
(34)A.方法F1无法被访问
B.只有在类O内才能访问方法F1
C.只有在类P内才能访问方法F1
D.只有在类Q内才能访问方法F1
(35)A.类O、P和Q的对象都可以访问方法F2
B.类P和Q的对象都可以访问方法F2
C.类0和Q的对象都可以访问方法F2
D.只有在类P内才能访问方法F2
(36)A.类0、P和Q的对象都可以访问方法F3
B.类0、P和Q的对象都不可以访问方法F3
C.类0和Q的对象都可以访问方法F3
D.类P和Q的对象都可以访问方法F3。
解析:
此例写成C++代码为
classO{
voidF1(){}
voidF2(){F1();
}
protected:
voidF3(){}
classP:
protectedO{};
classQ:
publicO{};
{Oo1;
Pp1;
Qq1;
o1.F2();
p1.F2();
//错误。