继承&多态
来源:互联网 发布:骚男淘宝外设店网址 编辑:程序博客网 时间:2024/05/06 15:55
一、继承是面向对象复用的重要手段。通过继承定义一个类继承是类型之间的关系建模,共享公有的东西,
实现各自本质不同的东西。
三种类成员访问限定符1.public(公有)2.protected(保护)3.private(私有)。
三种继承关系1.public(公有继承)2.protected(保护继承)3.private(私有继承)。
class Person //基类/父类
{
public:
void Display()
{
cout << _name << endl;
}
protected:
char*_name;
};
class Student :public Person //子类/派生类(继承父类)
{
protected:
int _num;
};
继承是一种复用的手段,在继承关系里基类的成员类的成员派生类的成员,由此大道复用的目的。
成员 基类的protected
成员 基类的private
成员继承引起的访问控制
关系变化概括public继承仍为public成员仍为protected成员不可见基类的非私有成员
在子类访问属性都
不变protected继承变为protected成员变为protected成员不可见基类的非私有成员
都成为子类的保护
成员private继承变为private成员变为private成员不可见基类中的非私有成
员都成为子类的私
有成员总结:
1.基类的私有成员在派生类中是不能被访问的,如果一些基类成员不想被基类对象直接访问,但是需要在派生类中
访问,就定义为保护成员,可以看出保护成员限定符是因继承才出现的。
2.public继承是一个接口继承,保持is-a原则,每个父类可用的成员对子类也可用,因为每个子类对象也都是父类对象。
3.protected/private继承是一个实现继承,基类的部分成员并未完全成为子类接口的一部分,是 has-a的关系原则,所以
非特殊情况下不会使用这两种继承关系,在绝大多数的情况下使用的都是公有继承。
4.不管哪种继承方式,在派生类内部都可以访问基类的公有成员和保护成员但是基类的私有成员存在但是在子类中不
可见(不能访问)。
5.使用关键字class时默认的继承方式是private,使用struct默认的继承方式是public,不过最好现实的写出继承方式。
6.在实际运用中一般使用都是public继承,及少使用protected/private继承。
#include<iostream>
#include<string>
using namespace std;
class Person
{
public:
void Display()
{
cout << _name << endl;
}
protected:
string _name;
private:
int _age;
};
class Student :public Person
{
protected:
int _num;
};
int main()
{
return 0;
}
二、继承与转换--赋值兼容规则--public继承
1.子类对象可以赋值给父类对象(切片/切片)
2.父类对象不能赋值给子类对象
3.父类的指针/引用可以指向子类对象
4.子类的指针/引用不能指向父类对象(可以通过强制类型转换完成)
#include<iostream>
#include<string>
using namespace std;
class Person
{
public:
void Display()
{
cout << _name << endl;
}
protected:
string _name;
private:
int _age;
};
class Student :public Person
{
protected:
int _num;
};
void Test()
{
Person p;
Student s;
p = s;//1.子类对象可以赋值给父类对象
//2.父类对象不能赋值给子类对象(s=p)
Person*p1 = &s;
Person&r1 = s;//3.父类的指针/引用可以指向子类对象
Student*p2 = (Student*)&p;/*4.子类的指针/引用不能指向父类对象(可以通过强制类型转换完成)*/
Student&r2 = (Student&)p;
}
int main()
{
return 0;
}
继承体系中的作用域
1.承体系中基类和派生类都有独立的作用空间
2.子类和父类中有同名成员,子类成员将屏蔽父类成员的直接访问
3.注意在实际中在继承体系里面最好不要定义同名的成员。
派生类的六个默认成员函数
在继承体系里面,在派生类中如果没有显示定义这六个默认成员函数,编译系统则会默认
合成这六个默认成员函数。
1.构造函数2.拷贝构造函数3.析构函数4.赋值操作符的重载5.取地址操作符的重载6.const修饰的取地址操作符重载
单继承&多继承
1.单继承 :一个字类只有一个直接父类时称这个继承关系为单继承
2.多继承:一个子类有两个或者两个以上的直接父类时称这个继承关系为多继承
- 继承 & 多态
- 多态&继承
- 继承、多态
- 继承-多态
- 多态, 继承
- 继承 多态
- 继承&多态
- 继承 多态
- 多态,继承
- 继承,多态
- 继承、多态
- 多态,继承
- 继承&多态
- 继承,多态
- 继承&多态
- 继承&&多态
- 继承,菱形继承,多态,虚继承、菱形虚拟继承
- 继承,菱形继承,多态,虚拟继承,多虚拟继承,菱形虚拟继承
- web前端学习日记6
- 【模式识别】
- APUE(8) ---- 进程控制(1)
- 最重要的也是最实用的(oracle运用存储过程嵌套游标来实现分页)
- shell test应用
- 继承&多态
- 多校连萌(一)C
- 通达OA流程触发器使用
- 为何 987654321/123456789 的值是 8.0000000729
- 一张图搞清楚定位关系(新手必收藏)
- 选择标签获取选择的值以及联动菜单的实现
- 抛出异常及声明异常 自己定义一个异常
- 进阶学python之1 Pandas
- Java虚拟机的基本结构