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

武汉做网站的公司排名谷歌浏览器直接打开

武汉做网站的公司排名,谷歌浏览器直接打开,免费主页空间申请,word 关于做网站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://www.hkea.cn/news/895230/

相关文章:

  • 桂园精品网站建设费用网站seo查询站长之家
  • 安卓手机怎么做网站站长工具seo综合查询广告
  • 余姚网站建设的公司手机百度账号申请注册
  • 预付网站制作费怎么做凭证如何自制网站
  • 定制网站多少钱北京seo网站管理
  • 南昌做网站公司哪家好如何建立独立网站
  • 成都解放号网站建设什么是百度竞价
  • 网站优化的基本思想与原则百度号码
  • 沧州网站建设制作设计优化深圳seo优化推广
  • 建立一个网站需要什么技术网上培训机构
  • 网站设计与管理论文百度账号注册平台
  • 网站空间商推荐seo是什么职位缩写
  • 怎么建设boss网站文件外链
  • 百度推广网站建设费百度搜索引擎的网址是多少
  • php 手机网站 上传图片定制网站建设
  • 关于网站建设的问题百度关键词分析
  • 登录官方网站装修公司网络推广方案
  • 设计网站官网入口网站搜索优化方法
  • 网站优化qq群山东做网站
  • wordpress icomoon太原seo快速排名
  • 中华建设杂志网站记者数据指数
  • 网站开发测试情况南召seo快速排名价格
  • 上海仓储公司小红书seo优化
  • 南京建设公司网站网络营销整合推广
  • wordpress更改语言沈阳seo优化
  • wordpress免费网站世界大学排名
  • 做网站的属于什么专业?百度爱采购竞价推广
  • 网站建设一年多少恰东莞网站到首页排名
  • 新企业网站应该怎么做SEO优化广告联盟有哪些
  • 手机app开发网站建设软文推广文章案例