this指针
不进行详细解释 一般情况下用不着
#include <iostream>
using namespace std;
class Human
{
char james;
Human(char james);//构造函数 传入参数
};
Human::Human(char james)//对构造函数进行初始化
{
james = james;
//在fishc=fishc之前 所有的语法没有任何问题 虽然Human构造器中有一个名为james的参数
//虽然他与Human类中的属性同名 但却是不相干的两样东西 所以并没有错误
//如何向构造器知道哪个是参数 哪个是属性 就需要用到 this指针 (指向当前类生成的对象)
this->james = james;
//添加this指针后 编译器就知道 赋值操作符左边将被解释为当前对象的James属性 右边将被解释为构造器传入来的james参数
//todo如果代码不存在二义性隐患,不必使用this指针!
}
类的继承
什么是类
类是提供封装的逻辑单位,类的每一个对象都包含有描述其自身状态的数据集合,并且通过接收特定的消息来处理这个数据集合。如果程序设计人员能够通过增加、修改或替换指定类的部分内容的方法对该类进行剪裁,就可以适应不同的应用,从而在很大程度上增强了数据封装的价值
什么是类的继承
继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易
当一个类被其他的类继承时,被继承的类称为基类, 继承其他类属性的类称为派生类,又称为子类 每个子类均将继承在它的基类里定义的方法和属性
当创建一个类时( 派生类(子类)),您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可( 基类(父类)) 这个已有的类称为基类,新建的类称为派生类
继承 代表了子类与基类关系, 例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等
基类 & 派生类
一般情况下,继承的进程起源于一个基类的定义,基类定义了其所有派生类的公有属性,基类具有同一类集合中的公共属性,派生类继承了这些属性,并且增加了自己特有的属性。从任何已存在的类继承的实质就是建造新的派生类
一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。定义一个派生类,我们使用一个类派生列表来指定基类, 类派生列表以一个或多个基类命名,形式如下:
class 派生类名: 访问控制关键字 基类名 ( SubClass为子类名 BaseClass为基类名)
class SubClass:public BaseClass
{
数据成员和成员函数声明
};
其中,访问控制关键字 public 是 public、protected 或 private 其中的一个,BaseClass
是之前定义过的某个类的名称(基类),如果未使用访问控制关键字,则默认为private
(私有性访问)
如果基类中定义了一个静态成员,则在整个继承体系中只存在该成员的唯一定义。不论从基类中派生出多少个类,对于每个静态成员来说都只存在唯一的实例对于静态成员的访问控制规则,则是和其他的成员一样,如果基类中静态成员是private的,则派生类无权访问,如果静态成员是可以访问的,则我们既能通过基类使用它们,也可以通过派生类使用它 (但是在类内部可以的)
单重继承、多重继承与继承链
单继承
从一个基类派生的继承称为单继承,换句话说, 派生类只有一个直接基类,单继承声明语句的常用格式为: