分享
 
 
 

总览c & c++

王朝c/c++·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

1.0.C++ 和 C

C++是C语言的一个面向对象(object-oriented)的扩展(大师们都建议我们在学习C++的时候,把C++当成一门新的语言对待).

C++可以被用来编译C程序。你使用C所完成的任何工作,都可以使用C++完成。

C++程序与他们的扩展不能在C环境下编译通过。

2.0.面向对象编程

2.1.类

类是所有面向对象程序系统(OOPS)的基本组成。

一个类包含一个(或一组)对象和操作对象的函数

2.2.类的组成

一个类的定义包含变量和函数的宣告

一个类的定义同样为变量和函数提供不同的安全区域

class FILE_C

{

private:

long ptr; // 文件指针

char name[FNAME_LEN]; // 文件名

short state; // 文件状态

short mode; // 文件模式

public:

FILE_C(void); // 类构造器

~FILE_C(void);. // 类析构器

short.Open(char *,short); // open 函数

short.Close(void);. // close 函数

short.Read(char *,short); // read 函数

short.Write(char *,short);// write 函数

};

上面的FILE_C类包含四个私有数据成员(对象)和六个操作那些对象的函数

任何有权使用类的对象都必须通过类的函数操作

private关键字:说明它里面的数据除了类成员函数以外的任何对象都不能访问

2.3.类的构造器和析构器

FILE_C类有一个FILE_C()构造函数和一个~FILE_C析构函数

构造函数与类同名,它在类的实例创建的时候调用

并且初始化任何类的需要

析构函数在类名之前加上~字符

析构函数可以在类的实例终止时进行进行任何清除工作

类的实例可以用两种方式创建。

一种是使用标准C语言创建一个变量的方式创建:

short.x; // 创建一个名为x的变量

FILE_C LogFile; // 创建一个类FILE_C的实例

另外一种方式是通过指针和new关键字分派一个新的实例:

FILE_C *pLogFile; // 创建一个指向类FILE_C的指针

pLogFile = new FILE_C; // 创建一个实例并且分配空间

2.3.1.使用参数构造

构造函数也可以象其他函数一样使用参数。

参数使用在创建一个新的类实例的时候

.class FILE_C

{

....

public:

FILE_C(char *pFileName);

};

FILE_C.LogFile("LogFileName"); // 使用参数构造

2.4.类函数调用

类函数的调用方法与普通的C函数相同

不同的是它们使用相似的语法构造成员资格

.FILE_C LogFile; // 创建一个类FILE_C的实例

.FILE_C *pInputFile;. // 创建一个指向类FILE_C的实例的指针

.pInputFile = new FILE_C; // 创建一个类FILE_C的实例

.LogFile.Open("LogFile",O_APPEND); // 打开LogFile

.InputFile -> Open("InputDat",O_READONLY); // 打开InputFile

.InputFile -> Read(buffer,sizeof(buffer)); // 读 InputFile

从以上的示例可以看出,一个文件指针从来没有像标准C文件函数那样发送到FILE_C函数

每一个FILE_C的实例维持它自己的控制信息

C++通常在类和应用之间使用单一化界面因为类在它自己内部完成

它们包含所有属性和/或对象的内部描述

2.5.类函数声明

一个类的定义(比如FILE_C)将可能出现在一个头文件

实际的函数实现将出现在C++源文件

每一个类函数前面都使用符号::代表它的归属

.short FILE_C::Open(char * pFileName,short mode)

{

mode = mode; // 提取私有数据项

strcpy(name,pFileName);

// 执行打开操作

return (status);

}

2.6.Inline函数

如果一个类函数执行一个非常简单的任务,他可以被宣告成一个内联函数

一个内联函数实际上是一个函数的扩展,它在类中宣告并实现,通过包含inline声明

class FILE_C

{

private:

char.name[FNAME_LEN]; // 文件名

.....

public:

FILE_C(char *pFileName) { strcpy(name,pFileName); }

.....

};

上面的示例显示了FILE_C内联函数构造器的实现

注意:内联函数不能滥用

3.0.继承类

class BROWSE_C : FILE_C // browse继承自file

{

private:

short curline;

...

public:

BROWSE_C(void);

~BROWSE_C(void);

OpenFile(char *);

};

上面的示例,BROWSE_C类将不仅可以访问它所有的成员data/object,而且可以访问

FILE_C类的所有public/protected成员

下表显示了父子类的继承关系

.父..子

.----------..---------

.Private.....在继承类中不可见

.Protected...在继承类中被当作私有成员

.Public......在继承类中被当作受保护的成员

从上表可以看出,BROWSE_C可以使用

任何 FILE_C的public/protected数据和函数 FILE_C

应用程序将不能接受任何

FILE_C 类的私有数据或函数

这些是默认的类安全继承协议

3.1.自定义类继承

当定义继承类时,默认的安全继承可以重载:

class BROWSE_C : public FILE_C // browse 继承自 file

{

private:

short curline;

...

public:

BROWSE_C(void);

~BROWSE_C(void);

OpenFile(char *);

};

上例中,所有的FILE_C 类的公共功能同样

公开到使用BROWSE_C 类的应用程序中

3.2.容器类

容器类是包含别的类的类。

以下是使用一个类实现binary tree的例子:

class TREE_C

{

private:

struct TNODE_S. // 容器类

{

PVOID pvData;

struct TNODE_S *pstLeft;

struct TNODE_S *pstRight;

};

typedef struct TNODE_S TNODE_T;

typedef TNODE_T *TNODE_P;

typedef TNODE_T **TNODE_PP;

TNODE_P pstHead;

TNODE_P pstNode;

.....

public:

TREE_C(VOID);

~TREE_C(VOID);

SHORT Delete(PVOID); // Remove entry

SHORT Find(PVOID,PPVOID); // Find entry

SHORT Insert(PVOID); // Insert entry

.....

};

typedef TREE_C * TREE_CP;

typedef TREE_C ** TREE_CPP;

在binary tree 例子中,树中的每一个节点在TREE_C 类的实例

并不是都需要。所以每一个节点包含在TREE_C 类,

并且类TREE_C实行所有的包含在其内的TNODE_S操作

3.3.虚拟函数

虚拟函数提供一种方法为类基类具有

特有的或行为适当的到当前继承类

class FILE_C

{

private:

char.name[FNAME_LEN]; // file name

.....

public:

FILE_C(char *pFileName) { strcpy(name,pFileName); }

virtual short Reset(void);

};

class BROWSE_C : FILE_C // browse derived from file

{

private:

short curline;

...

public:

BROWSE_C(void);

~BROWSE_C(void);

OpenFile(char *);

short Reset(void);

};

short BROWSE_C::Reset(void)

{

FILE_C::Reset();

curline = 0;

}

4.0.操作重载

自从C++类定义详细的在类的实例操作

以来,C++允许所有标准操作(i.e.'+','-', '*', '/', '++', '--')

可以被当前类重新定义或重载

class STRING_C

{

private:

char * pChar;

int len;

....

public:

STRING_C(const char * = 0); // provide default value

~STRING_C(delete pChar);

void operator+(char *)

};

STRING_C::operator+(char *pC)

{

char * pBuf;

pBuf = new char[len=strlen(pC)+len];

strcpy(pBuf,pChar);

strcat(pBuf,pC);

delete pChar;

pChar = pBuf;

}

STRING_C Str("ABC");

Str + "DEF";. // 现在pChar = 'ABCDEF'

5.0.C++ 输入/输出

C++输出把C语言的printf家族简单化

C++定义关键字cout,cin,stdout,stdin设备

C++根据当前变量类型自动格式化

/* C */

printf("%s = %d\n", szRate, sRate);

/* C++ */

cout << szRate << " = " << sRate << "\n";

// C++另外一种方式

cout << form("%s = %d\n", szRate,sRate);

/* C */

scanf("%d",&sRate);

/* C++ */

cin >> sRate;

7.0.Reference Variables

C++提供一种语法允许程序员更加容易地使用指针到应用程序中

/* C */

short Afunc(short * psShort)

{

*psShort++;

}

/* C++ */

short Afunc(short & Short)

{

Short++;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有