C语言的类和对象Word格式.docx
《C语言的类和对象Word格式.docx》由会员分享,可在线阅读,更多相关《C语言的类和对象Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
![C语言的类和对象Word格式.docx](https://file1.bdocx.com/fileroot1/2022-12/16/7adb18fc-e524-43ed-b0f3-6485993ccd3f/7adb18fc-e524-43ed-b0f3-6485993ccd3f1.gif)
*******************************/
//Usingaconstructoranddestructor.
声明C++程序头文件
#include<
iostream>
string.h>
conio.h>
名字空间:
组织大型的程序结构·
usingnamespacestd;
全局变量声明·
/******************************/
#defineSIZE1024
classemployee
charname[SIZE];
//privatebydeaulte
public:
voidputname(char*n);
voidgetname(char*n);
private:
doublewage;
//now,privateagain
voidputwage(doublew);
//backtopublic
doublegetwage();
};
voidemployee:
:
putname(char*n)
strcpy(name,n);
}
getname(char*n)
putwage(doublew)
wage=w;
doubleemployee:
getwage()
returnwage;
intmain()
employeeted;
charmy_name[1024]="
\0"
;
ted.putname("
YigaoWu\n"
);
ted.putwage(12000);
ted.getname(my_name);
cout<
<
my_name<
"
makes$\n\n"
ted.getwage()<
peryear.\n"
employee.wage<
system("
pause"
/*程序的停止按键提示*/
return0;
【类内频繁使用访问限定符唯一优点是:
通过把一个类各个部分可视的组织在一起,可以使阅读程序者很好的阅读和理解,对于编译器没有什么区别。
在类中声明的函数称之为成员函数。
成员函数可以访问类的所属的所有的任何成员(也称为实例变量),类的任何元素都可被当做该类的成员。
对于成员也有一些限制,非静态成员变量没有初值,成员不能成为当前正被声明声明的类的对象(虽然一个成员可以是指向当前正被声明的类的指针)。
成员不能声明为auto、extern或register。
可以使一个类的所有数据成员为该类私有,这是实现封装方法的一部分,然而有时候也需要一个或者是几个为公有的(例如:
为了获取较快的执行速度,频繁使用的变量是全局可访问的)。
一旦一个变量变成了公有的,在用户程序的所有的地方都可以访问这个变量,访问公有的数据的成员的语法与调用成员函数的语法是一样“:
”指定对象名称,点运算符和变量名称。
inti,j,n,m;
employeeem_one,em_two;
em_one.i=1;
em_two.i=2;
em_one.j=3;
em_two.j=4;
调试函数\n"
em_one.i<
\n"
em_two.i<
em_one.j<
em_two.j<
一、-----→结构和类之间的关联
结构是C子集的一部分,是从C语言中继承过来的。
在C++中结构的作用被扩展了,是它称为一个类的代替方法。
类和结构的唯一区别在于:
默认时,结构的所有成员是公有的,儿类的所有成员是私有的,除此之外结构和类是等价的。
也就是说结构定义了一个类的类型。
结构体和类的相互关系·
structmystr
voidbuildstr(char*s);
//public
voidshowstr();
//nowgoprivate
charstr[255];
/*******************************/
voidmystr:
buildstr(char*s)
if(!
*s)*str='
\0'
//initalizestring
elsestrcat(str,s);
strcat(str,"
showstr()
str<
mystrs;
s.buildstr("
"
/*init*/
Hello"
there!
s.showstr();
类myter可做如下修改·
classmystr{
pubilc:
******************************/
>
有时候我们使用缩写POD来描述C风格的结构体――-不包含成员函数、构造函数和析构函数。
POD表示PlainOldData(及普通老数据)。
【结构和类的总结】
1、增强了结构能力;
2、增强了其移植性;
3、类定义可自由演化,结构体必受限于C的语言的定义;
二、-----→联合和类之间的关联
和结构体一样,联合(union)也可以用来定义类,在C++中联合既包括成员函数,也包含变量,还可以包含构造函数和析构函数。
C++的连克包含了C联合的所有的特性,其最重要的是数据元素共享内存的相同地址。
与结构相似,默认时,联合成员都是公共的,并且完善与C兼容。
<下面使用联合交换组成一个无符号的短整型的字节>
联合体使用举例·
unionswap_byte
voidswap();
voidset_byte(unsignedshorti);
voidshow_word();
unsignedshortu;
unsignedcharc[2];
voidswap_byte:
swap()
unsignedchart;
t=c[0];
c[0]=c[1];
c[1]=t;
show_word()
u<
set_byte(unsignedshorti)
u=i;
swap_byteb;
b.set_byte
(1);
b.swap();
b.show_word();
【与结构体一样,C++中的联合声明定义了一种特殊的类。
保持了封装原则。
【与结构一样,术语POD一般也适用于不包含成员函数、构造函数和析构函数的联合。
使用C++联合时遵守以下限制条件:
1、联合不能继承任何其他类型的类;
2、联合不能是类,不能含有虚成员函数;
3、静态变量不能是联合的成员,不能使用引用的成员;
4、不能有任何成员的重载,“=”运算符的对象;
5、如果一个重载有明确的构造函数和析构函数,不能成为联合的成员。
三、-----→匿名联合
C++中有一种特殊的联合,成为匿名联合(anonymous)。
匿名联合没有类型名称,也不声明这类联合的任何变量。
但是匿名联合告诉编译器它的成员变量共享同一内存地址。
然而,变量的本身可以直接被引用,无需常规的点运算符语法,
//defineanonymousunion
union
{
longl;
doubled;
chararry[32];
};
//now,referenceunionelementsdirectly.
l=10000;
l<
\n"
d=123.2342;
d<
strcpy(arry,"
YigaoWu"
arry<
【联合元素的引用和一般局部变量的引用没有什么两样,事实上和程序有关,这完全取决于如何使用它们。
它们是在联合中声明定义的,其作用域和其他任何位于同一块的的局部变量是相同的。
这就意味着匿名联合成员的名称不应该和该联合域的其他标示符发生冲突。
联合和匿名联合都受以下限制:
1、匿名联合包含的元素只能是数据,不允许包含成员函数,同时不能包含私有或保护元素;
2、全局匿名联合必须被声明为静态。
四、-----→友元函数
准许非成员函数通过友元(friend)访问类的私有成员是有可能的。
友元函数可以访问类的私有成员和保护成员。
要在类中声明一个友元函数,在类中的包含他的原型。
只需要在前面放上关键词friend。
如下程序:
classPoint
{
public:
Point(doublexx,doubleyy){x=xx;
y=yy;
}
voidGetxy();
frienddoubleDistance(Point&
a,Point&
b);
private:
doublex,y;
};
友元函数的作用:
1、对于重载某些运算符有好处;
2、友元函数使得构造某些类型的I/O函数更加容易;
3、两个或者是两个以上的类包含与程序其他部分有关的想回关联的成员时,可以使用友元函数;
【第三类友元的用法s实例】
constintIDLE=0;
constintINUSE=1;
classC2;
classC1
intstatus;
/*IDLEisoff,INUSEifonscreen*/
voidset_status(intstate);
friendintidle(C1a,C1b);
classC2
voidC1:
set_status(intstate)
status=state;
voidC2:
intidle(C1a,C2b)
if(a.set_status||b.set_status)return0;
elsereturn1;
友元函数学习·
intmian()
C1x;
C2y;
x.set_status(IDLE);
y.set_status(IDLE);
if(idle(x,y))cout<
Screencanbeused.\n"
elsecout<
Inuse.\n"
x.set_status(INUSE);
system("
四、-----→友元类
一个类可以使另一个类的友元。
此时,友元类和他所有成员函数可以访问其他类定义的私有成员。
(例如一下实例)
Usingafriendclass。
classTwoValues
inta;
intb;
TwoValues(inti,intj){a=i,b=j;
friendclassMin;
classMin
intText_function(TwoValuesx);
#if1
intMin:
Text_function(TwoValuesx)
returnx.a<
x.b?
x.a:
x.b;
#endif
友元类学习·
TwoValuesob(10,20);
Minm;
m.Text_function(ob)<
友元类的使用.\n"