- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.1C语言概述
2.1.1 C++的面向对象特征
概括地讲,面向对象系统包含3个要素:对象、类和继承。能支持所有上述3个方面的语言,被称为面向对象语言。从本质上讲,C++并不是一种完美的面向对象设计语言,而是C语言的一个超集,与C兼容也是其成功的一个重要方面,因而C++也是一种混合语言,既支持传统的面向过程程序设计,又支持面向对象程序设计,灵活性大。它继承了传统C语言的优点,克服了其不足;又在面向对象特征及非面向对象特征这两个方面增加了新功能,使得它既适用于结构化程序设计,又能满足面向对象程序设计的要求,符合广大程序设计逐步更新其程序设计观念和方法的要求,因而很快流行起来。
C++的面向对象特征和风格:
(1)C++借助于把一个数据结构及其操作函数组合在一起,提供了类/对象的构造和封装机制。
定义一个类的一般形式是:
class calss_name
{
private: //私有成员部分(类外部的代码不能直接访问的部分)
data and methods //可包括成员变量和成员函数
protected: //保护的成员部分
data and methods
public: //公用成员部分
data and methods //公有部分定义的变量和函数
}object_name_list;
在缺省关键词的情况下,类中所有项均为私有的。C++中的struct 和 union 也和 class一样能够定义一个类,所不同的是定义成员时,在缺省关键词的情况下所有成员均为公有的。
(2)提供对象的创建和删除,特别是使用了构造函数和析构函数来管理对象。
构造函数是一个特殊的成员函数,其函数命名与类名同名,它指定了一个类的实例对象的建立和初始化过程。
析构函数是用于释放内存和删除由构造函数创建的对象。
例如:
#include iostream.h //不同于C的stdio.h
class myclass
{
int a;
public:
myclass();
void show();
};
myclass::myclass()
{
cout”in constructor\n”;
a=10; //a的值由myclass()自动初始化
} //注意,构造函数是没有返回值的
.
.
.
main()
{
myclass ob ; //变量说明语句也是动作语句,调用了构造函数
ob.show();
return 0;
}
(3)能够进行对象间的消息传递、操作调用,除了使用操作符、指针、表达式外,还有指向自身的this等。
(4)支持继承机制,特别是提供了在一种通用的功能上进行具体化定义的方法,使用基类和派生类,形成了十分方便的继承机制。
在C++中,一个派生类可以有多个基类,支持多重继承。说明一个类继承另一个类的形式为:
class 派生类名:[public/private/protected] 基类名
{ //冒号是类属范围算符(双目)
.
.
.
}
例如:
class base
{
int x;
public:
void setx(int n){x=n;}
void showx(){coutx”\n”;}
};
class derived:public base
{
int y;
public:
void sety(int n){y=n;}
void showy(){couty”\n”;}
};
main()
{
derived ob;
ob.setx(10);
ob.sety(20);
ob.showx();
ob.showy();
return 0;
}
(5)具有灵活的处理动态连接功能,其方法是使用虚函数(在函数名前用关键字virtual进行标识),它只能在最高层的基类中定义。
C++中函数名和运算符重载也是支持多态性的好方法。例如,下面重载构造函数提供了便利的初始化对象。
#include iostream.h
class myclass
{
int x;
public: //两种构造函数重载,使对象oba初始化,而obb没有
myclass(){x=0;} //no initializer
mycla
文档评论(0)