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)编程基础--函数模板类模板

C++笔记--面向对象(OOP)编程基础--STL入门与使用

C++笔记--面向对象(OOP)编程基础--虚函数纯虚函数多继承

C++笔记--面向对象(OOP)编程基础--操作符重载及友元

什么是c++的oop机制?

php面向对象编程(oop)基础知识