C++笔记--面向对象(OOP)编程基础--类的继承及多态
Posted xiangjai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++笔记--面向对象(OOP)编程基础--类的继承及多态相关的知识,希望对你有一定的参考价值。
目录
继承
继承基本概念
访问权限
C++中的类成员访问级别(public、private、protected)
1、需要被外界访问的成员直接设置为public
2、只能在当前类中访问的成员设置为private
3、只能在当前类和子类中访问的成员设置为protected,protected成员的访问权限介于public和private之间。
父类成员访问级别 | ||||
继 承 方 式 | public | proteced | private | |
public | public | proteced | private | |
proteced | proteced | proteced | private | |
private | private | private | private |
判断某一句话,能否被访问
1)看调用语句,这句话写在子类的内部、外部
2)看子类如何从父类继承(public、private、protected)
3)看父类中的访问级别(public、private、protected)
继承中的构造和析构
1、子类对象在创建时会首先调用父类的构造函数
2、父类构造函数执行结束后,执行子类的构造函数
3、当父类的构造函数有参数时,需要在子类的初始化列表中显示调用
4、析构函数调用的先后顺序与构造函数相反
继承与组合混搭情况下,构造和析构调用原则
原则:
先构造父类,再构造成员变量、最后构造自己
先析构自己,在析构成员变量、最后析构父类
先构造的对象,后释放
示例
#include <iostream>
#include "stdlib.h"
#include "stdio.h"
using namespace std;
class A {
private:
char *p;
public:
A(char *p) {
int p_len = strlen(p);
this->p = (char *)malloc(p_len);
cout << "构造A..." << endl;
}
~A() {
if(p != NULL) {
free(p);
p = NULL;
}
cout << "析构A..." << endl;
}
};
class B : public A {
public:
B(char *p) : A(p) {
cout << "构造B..." << endl;
}
~B() {
cout << "构造B..." << endl;
}
};
int main() {
B b1("abcd");
return 0;
}
结果
构造A...
构造B...
构造B...
析构A...
多继承(摒弃,忘记)
多继承的二义性:多继承带来的便利性远远小于软件维护、软件架构复杂性
赋值兼容性原则
子类对象可以当作父类对象使用
子类对象可以直接赋值给父类对象
子类对象可以直接初始化父类对象
父类指针可以直接指向子类对象
父类引用可以直接引用子类对象
总结:子类就是特殊的父类 (base *p = &child;)
以上是关于C++笔记--面向对象(OOP)编程基础--类的继承及多态的主要内容,如果未能解决你的问题,请参考以下文章
C++笔记--面向对象(OOP)编程基础--STL入门与使用
C++笔记--面向对象(OOP)编程基础--虚函数纯虚函数多继承