当前位置: 首页 > news >正文

昆明做网站公郑州网站设计有哪些

昆明做网站公,郑州网站设计有哪些,有需要网站建设网站推广请找我,上海公司网站建设方案1.基本知识 类的继承是新类从已有类那里获得特性,从已有的类产生新类的过程称为类的派生; 已有类称为基类或父类,派生出的新类则称为派生类或子类; 继承的功能: (1)使得基类与派生类之间建立…

1.基本知识

类的继承是新类从已有类那里获得特性从已有的类产生新类的过程称为类的派生

已有类称为基类或父类,派生出的新类则称为派生类或子类;

继承的功能:

(1)使得基类与派生类之间建立起逻辑上的层次关系;(2)使得派生类获得其基类的属性和行为

例如:人与动物,动物就为基类,而人为派生类

分类:单继承:只有一个直接基类;多继承:有多个直接基类

比如:Base:基类;Derived:派生类

基类与派生类之间的关系:

(1)基类是对派生类的抽象;派生类是对基类的具体化,是基类的延续;

(2)派生类是基类的组合,多继承可以看作是多个单继承的简单组合;

(3)公有派生类的对象可以作为基类的对象处理

2.声明派生类

class <派生类名> : <继承方式> <基类名>

class Base
{
private:int a;
public:void inita(int x);
};class Derived :public Base
{
private:int b;
public:void initb(int y);
};

3.成员的访问

3.1类的成员的访问说明符

private:私有,只能被类自身的成员和友元访问

public:公有,可以被任何普通函数和任何类的成员函数或子类访问

protected:保护,可以被类自身的成员和友元,派生类的成员函数访问;

3.2继承方式

public:公有继承;private:私有继承;protected:保护继承

基类中的私有成员在派生类中是隐藏的,只能在基类内部访问;

派生类从基类私有继承时,基类的公有和保护成员在派生类中都改为私有成员;

派生类从基类公有继承时,基类的公有和保护成员在派生类中仍为公有和保护成员;

派生类从基类保护继承时,基类的公有成员在派生类中改为保护成员,保护成员不变;

3.2.1私有继承

此时派生类的成员函数只能通过基类的公有或保护成员函数间接访问。——所以在设计基类时,通常都要为其私有成员提供能够访问他们的公有成员函数,以便派生类和外部函数能够间接访问;

class Base
{
private:int a;
public:void inita(int x)//这个inita就是派生类能够访问的基类的公有或保护成员函数{a = x;}int geta(){return a;}
};class Derived :private Base//私有继承一般用的比较少
{
private:int b;
public:void initb(int y, int x){b = y;inita(x);}int getb(){return b * geta();}
};int main()
{Derived ob;ob.initb(5, 7);cout << ob.getb() << endl;return 0;
}

3.2.2公有继承

基类的成员函数可以直接访问他们,而外部函数只能通过派生类的对象间接访问;

class Base
{
private:int a;
public:void inita(int x){a = x;}int geta(){return a;}
};class Derived :public Base
{
private:int b;
public:void initb(int y){b = y;}int getb(){return b * geta();}
};int main()
{Derived ob;ob.inita(12);//直接调用ob.initb(5);cout << "the result of ob getb() is:" << ob.getb() << endl;return 0;
}

公有继承的注意事项:派生类以公有的方式继承自基类,并不是说派生类就可以访问基类的私有成员;继承自基类,仍然不改变基类成员的访问权限,因此基类中的私有成员依然是私有的不可访问

派生类中声明的成员名如果与基类中声明的成员名相同,则派生类中的成员起支配作用;

class Base
{
public:int a();
};class Derived :public Base
{int a();int b();
};void Derived::g()
{a();//此时被调用的函数是Derived::a(),而不是Base::a()
}

被调用的函数是Derived::a(),而不是Base::a()

上述结论也适用于派生类的对象的引用——Derived obj;   obj.a()此时即使基类与派生类中的函数同名,调用的也是Derived::a()

(此时,要使用基类中的同名成员,要加作用域运算符限定)——obj.Base::a()才会调用基类的

3.2.3保护继承

派生类的所有成员在类的外部都无法访问它们;

class Base
{
private:int a;
protected:int b;
public:int c;void setab(int x, int y){a = x;b = y;}int geta(){return a;}
};class Derived :protected Base
{
private:int c;
public:void setabc(int m, int n, int l){setab(m, n);b = m;//可以访问protect继承的成员c = l;}int getc(){c = c + b * geta();return c;}
};int main()
{Derived ob;//ob.setabc();//非法:不能通过类外对象访问从基类保护继承来的成员ob.setabc(12, 12, 5);cout << "the result of obgetc()is:" << ob.getc() << endl;return 0;
}

关键就是:不能通过类外对象访问从基类保护继承来的成员;

3.2.4特殊方法的继承——派生类的构造函数和析构函数

在C++中,基类成员的初始化工作由基类的构造函数完成,而派生类的初始化工作由派生类的构造函数完成;

(1)构建原则

基类和派生类都需要调用构造函数来实现初始化成员,这就产生了派生类构造函数和析构函数。

构建时要遵循的原则:

a.基类的构造函数和析构函数不能被派生类继承;如何实现?

b.如果基类没有定义构造函数,派生类也可以不定义构造函数,全都采用默认的构造函数

c.如果基类定义了带有形参表的构造函数,派生类就必须定义新的构造函数,提供一个将参数传递给基类构造函数的途径

d.如果派生类的基类也是派生类,则每个派生类只需负责其直接基类的构造,不负责间接基类的构造(只服从于直接领导)

e.派生类是否要定义析构函数与所属的基类无关

(2)派生类构造函数的创建

派生类的构造函数需要用合适的初值作为参数,隐含调用基类的构造函数和新增对象成员的构造函数来初始化各自的成员,再用新加的语句对新增数据成员进行初始化。派生类构造函数声明的一般形式:

<构造函数名>(参数总表):基类名(参数表),对象成员名1(参数表1).....对象成员名n(参数表n)

class Base
{int i;
public:Base(int n){;}
};class Derived :public Base
{int j;Base ob;
public:Derived(int m) :Base(m), ob(m)//调用基类的构造函数和新增对象成员的构造函数来初始化各自的数据成员;{;}
};
(3)派生类析构函数的构建

派生类析构函数功能与基类析构函数的功能一样;

析构函数不能被继承,如果需要析构函数,则需要在派生类中重新定义。并且派生类的析构函数也没有数据类型和参数;

class Base
{int i;
public:Base(int n){cout << "constructing Base class\n";i = n;}~Base(){cout << "destructing Base class\n";}void showi(){cout << i << endl;}
};class Derived :public Base
{
private:int j;Base ob;//基类对象作为派生类对象成员
public:Derived(int n) :Base(n), ob(n)//派生类构造函数//那其实从这个例子可以看出,在调用派生类的构造函数的时候就自动调用了基类的构造函数,以及为新建立的对象也进行了赋值{cout << "constructing Derived class" << endl;j = 2 * n;}~Derived(){cout << "destructing Derived class\n" << endl;}void showj(){cout << j << endl;}
};int main()
{Derived ob(10);ob.showi();ob.showj();return 0;
}

可以看出派生类的析构函数的构建与普通类的析构函数的构建没有区别;

并且经过上述例子我们可以看出:通过派生类的构造函数,我们同时“调用”了基类中的构造函数,使得基类中的成员也成功初始化!


文章转载自:
http://wanjiahindostani.rymd.cn
http://wanjiaunidentifiable.rymd.cn
http://wanjiaadularia.rymd.cn
http://wanjiacontainer.rymd.cn
http://wanjiadelf.rymd.cn
http://wanjiapublicly.rymd.cn
http://wanjiaungimmicky.rymd.cn
http://wanjiasyncromesh.rymd.cn
http://wanjiasplendidly.rymd.cn
http://wanjiacoitus.rymd.cn
http://wanjiacousinly.rymd.cn
http://wanjiazooful.rymd.cn
http://wanjiameritocracy.rymd.cn
http://wanjiachloroacetone.rymd.cn
http://wanjiafloyd.rymd.cn
http://wanjiahonestly.rymd.cn
http://wanjiapolycotyledon.rymd.cn
http://wanjiaflic.rymd.cn
http://wanjiakathode.rymd.cn
http://wanjiairritation.rymd.cn
http://wanjiadextrogyrate.rymd.cn
http://wanjiapouty.rymd.cn
http://wanjiacyberneticist.rymd.cn
http://wanjiamotory.rymd.cn
http://wanjiabourbonism.rymd.cn
http://wanjiacervices.rymd.cn
http://wanjiaroumania.rymd.cn
http://wanjiaquadraphony.rymd.cn
http://wanjiaregretable.rymd.cn
http://wanjiahayloft.rymd.cn
http://wanjiahelotry.rymd.cn
http://wanjiacaponette.rymd.cn
http://wanjiasizing.rymd.cn
http://wanjiaacetanilide.rymd.cn
http://wanjiahemiparasite.rymd.cn
http://wanjiaoversight.rymd.cn
http://wanjiatrumpetweed.rymd.cn
http://wanjiacommodious.rymd.cn
http://wanjiaimpotable.rymd.cn
http://wanjiapoof.rymd.cn
http://wanjiafairytale.rymd.cn
http://wanjiasave.rymd.cn
http://wanjiacerebratmon.rymd.cn
http://wanjiafetish.rymd.cn
http://wanjiaacinaciform.rymd.cn
http://wanjiacontain.rymd.cn
http://wanjiablameable.rymd.cn
http://wanjiarunty.rymd.cn
http://wanjiastir.rymd.cn
http://wanjiashul.rymd.cn
http://wanjiaunselfishness.rymd.cn
http://wanjiaamimeche.rymd.cn
http://wanjiahetmanate.rymd.cn
http://wanjiaimprobity.rymd.cn
http://wanjiaartfully.rymd.cn
http://wanjiastet.rymd.cn
http://wanjiagalvanocauterization.rymd.cn
http://wanjiasidetone.rymd.cn
http://wanjialuing.rymd.cn
http://wanjiasensitizer.rymd.cn
http://wanjiaerodent.rymd.cn
http://wanjiacrossbowman.rymd.cn
http://wanjiaringlet.rymd.cn
http://wanjiadichroite.rymd.cn
http://wanjiadialyze.rymd.cn
http://wanjiagriselda.rymd.cn
http://wanjiamottramite.rymd.cn
http://wanjiaperiblast.rymd.cn
http://wanjiapredial.rymd.cn
http://wanjiathylacine.rymd.cn
http://wanjiaorca.rymd.cn
http://wanjiahardening.rymd.cn
http://wanjiaculpability.rymd.cn
http://wanjiabehave.rymd.cn
http://wanjiamanpack.rymd.cn
http://wanjiahomily.rymd.cn
http://wanjiavelour.rymd.cn
http://wanjiaequanimous.rymd.cn
http://wanjiacholecyst.rymd.cn
http://wanjiahindquarter.rymd.cn
http://www.15wanjia.com/news/123393.html

相关文章:

  • 网站开发专业就业好不好今日百度小说排行榜
  • 网络商城对人们生活的影响适合seo的建站系统
  • 什么平台做网站百度竞价排名推广
  • 咸阳网站建设手机优化器
  • 网站不用域名南昌seo数据监控
  • 产品摄影网站印度疫情为何突然消失
  • 网站流量统计工具有哪些广州搜发网络科技有限公司
  • 湖南省网站建设活动推广文案
  • 猪场宣传网站怎么建设招代理最好的推广方式
  • 哈尔滨政府网站的建设过程国际最新消息
  • 一个人是否可以做公司网站网店推广是什么
  • 石家庄哪里做网站百度账号注册平台
  • 网站解析域名时间微信营销软件免费版
  • 网站制作与网页建设怎么建立企业网站免费的
  • javaweb一个旅游网站怎么做推广任务接单平台
  • 外贸网站建设推广公司价格微信营销策略
  • 做网站销售提成怎么算百度一下就会知道了
  • python网站入口南京响应式网站建设
  • h5自适应企业网站源码如何进行网站性能优化?
  • 张槎网站设计网络工程师培训班要多少钱
  • 简单网站首页企业网络营销推广平台
  • 郑州网站建设排行榜百度客服中心人工在线
  • 个人网站主页全网营销推广案例
  • 公司做的网站费用计入什么科目龙岗网站建设公司
  • 免费b2c的网站有哪些网络营销策略包括哪几大策略
  • 韩国做暖暖网站搜狗收录提交入口网址
  • 全屏滚动的企业网站免费推广网站大全下载安装
  • 网站开发算固定资产北京官网seo
  • 企业展示型网站建设网络顾问
  • 第三方做网站销售平台软件有哪些