当前位置: 首页 > 科技观察

第五篇

时间:2023-03-17 18:34:02 科技观察

适合C语言基础的C++教程前言在上面的教程中,我们已经完成了C++相对于C语言的独特语法。在下一个教程中,我们将描述C++中的面向对象语言。语法特征。我们在学习这种面向对象的编程方法时,经常会听到这三个词,封装、继承、派生。这也是面向对象编程的三大特点。本节我们将依次对封装、继承、派生进行阐述。的具体用法,这里先描述封装该属性的相关内容。下图是封装特性中包含的一些内容。封装下图展示了封装的相关特性:image-20210209204824118那么上图中抽象出来的数据成员和成员函数具体是什么意思呢,前面的教程有讲到,在前面的教程中,我们选择一个以Person类为例进行讲解,其中我们在这个类中有name和age,这是我们抽象出来的数据,抽象出来的成员函数就是前面教程中提到的setName()和setAge()函数,在设计中在使用这个类的时候,这个类的一些成员会被设置为private或者public,这就是访问控制。具体代码如下:/*为了代码简洁,省略了相关的构造函数和析构函数,以体现封装的特点*/classPerson{private:char*name;intage;public:Person(){cout<<"Person"<name){deletethis->name;}}voidsetName(char*name){if(this->name){deletethis->name;}this->name=newchar[strlen(name)+1];strcpy(this->name,name);}intsetAge(inta){if(a<0||a>150){age=0;return-1;}age=a;return0;}};继承的意义就如同它的字面意思一样。用更专业的话说,就是继承基类的属性,这个新类叫做派生类。下面的示意图也说明了继承带来的代码的简洁和方便。image-20210209211013964如上图所示,一个人必须有name和age这两个属性,那么作为学生,他也必须有name和age这两个属性。这些属性是否在类中重新定义?显然,由于引入了继承特性,只需要继承Person类,那么Student就具有了Person类的相关属性。在上面代码的基础上,我们添加如下代码:/*注意是在上面代码的基础上*/classStudent:publicPerson{};intmain(intargc,char**argv){Students;s.setName("zhangsan");s.setAge(16);s.printInfo();return0;}在上面的代码中,Student类继承自Person类,我们可以看到在上图的Student类中,没有setName而setAge的成员函数,但是在定义的Student实例中,可以应用setName和setAge的成员函数,也就是说Student类继承了Person类。继承后的访问控制private派生类继承自基类,继承的方式有很多种,可以是private继承,public继承,也可以是protected继承。那么此时基类的各个数据成员的访问属性是什么呢?我们来看下图,它以各种方式展示了从基类继承的派生类的数据成员的属性。image-20210209223145289从这张表可以清楚的知道基类的访问属性和派生类的访问属性的对应关系。同样,我们用一个简单的例子来说明这个知识点:){this->money=money;}};这是基类的数据成员和成员函数。为了更好的说明继承数据的属性,我们定义了一个子类。代码如下:classSon:publicFather{private:inttoy;public:voidplay_game(void){cout<<"play_game()"<money=money;}};我们可以看到在Father类中,增加了一个protected修饰的room_key,再看Son类的代码:classSon:publicFather{private:inttoy;public:voidplay_game(void){intm;cout<<"sonpalygame"<