独自幸福快乐三招教你快速消除浮肿浮肿拜拜小脸自然现依依不舍孤独
民生评论 2020-07-01 18:30 字号: 大 中 小
第十五天和第十六天
从已存在的类继承得到新类的过程叫做派生。派生是继承的过程。
用:将派生类和基类分开。派生类将继承基类所有公有成员。(构造函数和析构函数除外)
不要设计有许多私有成员的基类。
protected:被保护成员,可以被基类和派生类使用。通常基类只包括公有和被保护成员。
如果希望类外程序包括派生类都无权访问类中数据,那么将其定义为私有。
class base:private emp//取代继承时VC++提供的缺省设置方式是private是对互联产业商业规则以及底线的清晰界定.即是从基类继承到的成员在派生类全都是私有成员。
class base:protected emp//继承来的保护成员和公有成员在派生类中全部都为被保护成员。
最常用的是这种:
class base:public emp//基类中的保护成员在派生类仍旧为保护成员,基类中的公有成员在派生类中仍旧为公有成员。
内部的缺省构造函数没有处理常量的能力。因此要求类中出现常量成员时需要自定义构造函数。并且需要利用构造初始化表,构造函数才能真正的进行构造和初始化,而不是构造和赋值。
class c{
int i;
char a;
float b;
public:
c(int i,char a,float b)://此处时冒号,构造函数原型声明,可以和初始化表在一行。
i(I),a(A),b(B){};//此处是初始化表
}
注意:字符数组成员和指针通常被保存在堆中,故要求在函数内赋值。
类中没有数组成员时,应当用构造初始化表完成所有初始化工作。
为什么要用继承:
通过继承再次利用了自己编写的代码,既维持了对数据的保护,又是开发程序的有利工具。如果买来了类工具库全行业的规模毕竟还很小。在这样的现实之下,甚至可以在没有实现部分源代码的情况下派生出新的类来,当需要得到一个和类库所提供的不同的窗口类时,可通过继承得到一个略有不同的新窗口。
继承的一个优点是可以在已经了解的编写好的代码基础上编写新的代码,从已经编写并调试好的类中很容易就能够派生出新的类。通过继承复用代码和数据,比非OOP程序设计中的复用更加安全有效。
被保护的访问权限用在何处?
在VC++添加被保护的访问权限是为了在维持对数据保护的情况下完成继承。派生类不能使用基类中的私有成员。
将基类中的某些成员定义为保护成员防止了类外的程序对其的访问,同时又允许派生类访问,被保护的成员仍旧不被余下程序所见,但所有的派生类都可以访问它。如果没有被保护访问权限就不能做到既对数据进行保护(私有性)又可以使派生类可以访问。
由一个基类得到派生类可以做那些改动。
可以在派生类添加数据成员和功能函数。子类总是比父类功能强大。
为什么单向继承优于多向继承?
单向继承代码比多向继承代码易于编写,可以加快编程速度并可减少错误。
为什么派生类必须定义访问权限?
因为在VC++中所有的派生类继承基类时缺省为私有继承。这种限制会带来不便。
将访问权限定义为protected将使得继承得到的公有成员和保护成员在派生类中都是保护成员。
将访问权限定义为public将使得继承得到的公有成员仍为公有成员,保护成员仍为保护成员,这是最通用的方式。
用构造初始化表后,除了能构造常量成员对象外,还可以使构造函数变的简捷,构造初始化表负责构造派生类。
字符数组必须在函数体内被赋值。字符数组成员和指针成员通常被保存在堆中故而要求在构造函数体内赋值。
[下一页]
例子程序:
#include
#include
class Parent{
protected:
char name[25];
int age;
public:
Parent(char[],int);
~Parent(){};
void disparent(void);
};
Parent::Parent(char N[],int A):age(A){
strcpy(name,N);
}
void Parent::disparent (void){
cout"Parent''s name is:" cout"Parent''s age is:" }
class Son:Parent{
int yrInSchool;
public:
void dispSon(void);
Son(char[],int,int);
};
Son::Son(char N[],int A,int Y):Parent(N,A),yrInSchool(Y){
}
void Son::dispSon (void){
cout"Son''s name is:" cout"Son''s age is:" cout"Son year IN school is:" }
class Daughter:Parent{
int yrInSchool;
char friendsName[25];
public:
void dispDaughter(void);
Daughter(char[],int,int,char[]);
};
Daughter::Daughter(char N[],int A,int Y,char F[]):Parent(N,A),yrInSchool(Y)
{
strcpy(friendsName,F);
}
void Daughter::dispDaughter (void){
cout"Daughter''s name is:" cout"Daughter''s age is:" cout"Daughter year IN school is:" cout"Daughter''s FriendsName is:" };
main(){
Parent mom("Betty",58);
Parent dad("tom",60);
sparent ();
sparent ();
Son boy("smalltom",17,11);
spSon ();
Daughter girl("ketey",18,12,"june");
spDaughter ();
return 0;
}
子类构造基类时,初始化表的参数顺序和父类的初始化表一致。这样才能将正确的值传递给父类的构造函数。
先构造基类对象在构造派生类对象。
如果需要限制或改变继承到成员的功能,在派生类中定义同名的数据成员或成员函数。
VC++自动析构继承对象从最低的派生类到基类。
什么食物可以舒筋活络菏泽治疗白癫风医院台州治疗白癫风医院西宁哪有白癜风专科医院西宁较权威的白癜风医院
西宁治疗白癜风
-
-
维特尔期待明日正赛表现已经找到了比赛的节搭配
维特尔:期待明日正赛表现 已经找到了比赛的节奏维特尔 ...
2020-06-02 | 民生评论
-
-
英国前首相参选英超主席曾自称球迷闹出大笑搭配
英国前首相参选英超主席 曾自称球迷闹出大笑话报道截图《每...
2020-05-31 | 民生评论
-
-
雨花台区召开第二次全国地名普查赛虹桥街道
雨花台区召开第二次全国地名普查赛虹桥街道业务培训会议雨...
2019-07-16 | 民生评论
-
-
通城县2017年3月24日集中供水日监测
通城县2017年3月24日集中供水日监测情况通城县城镇集中供水日...
2019-07-15 | 民生评论
-
-
市民政局扎实推进户籍制度改革助力城乡统筹
市民政局扎实推进户籍制度改革助力城乡统筹发展近年来,重...
2019-07-13 | 民生评论
-
-
陵城区民政局召开全区民政助理工作会议
陵城区民政局召开全区民政助理工作会议为做好我区2016年民政...
2019-07-12 | 民生评论