C++03:封装->继承->多态

一.简介

1.可维护

2.可复用

3.可扩展

4.灵活性好

面向对象的设计思想就是通过封装 继承 多态把程序的耦合性降低,使得程序更加的灵活,容易修改,并且易于复用

面向对象的五大基本原则

1.单一职责原则(SRP)

2.开放封闭原则(OCP)

3.里氏替换原则(LSP)

4.依赖倒置原则(DIP)

5.接口隔离原则(ISP)

函数编程

泛型编程

元编程

 

二.封装

class A{
  
public:
    A(int a){
  
    }
}

1.重载(Overload)

 

三.继承

class B: public A{
public:
    B(int a,int b):A(a){
  
    }
};
  
class C:public A{
public:
    C(int a,int c):A(a){
     
    }
};
  
//C++允许多继承
class D:public B,public C{
public:
    D(int a,int b,int c):B(a,b),C(a,c),A(a){
  
    }
     
};

1.继承的调用顺序

#pragma  once

#include <iostream>
using namespace std;

class F{

public:
    F(){ k5 = 10;  cout << "F:F()" << endl; }
    ~F(){ cout << "F:~F()" << endl; }
    //virtual ~F(){}

    void FuncA(){ cout << "F:FuncA()" << endl; }
    virtual void FuncB() { cout << "F::FuncB()" << endl; }
    int k5;

protected:
    int k4;

};

class Z : public  F{

public:
    Z(){ k5 = 5; cout << "Z:Z()" << endl; }
    ~Z(){ cout << "Z:~Z()" << endl; }
    

    void FuncA(){ cout << "Z::FuncA()" << endl; }
    void FuncB() { cout << "Z::FuncB()" << endl; }
    int k5;
    
protected:
    int k4;

};
#include "Jicheng.h"

int main()
{
    F* a = new F();  //F()
    cout << endl;

    F* a1 = new Z();  //F() Z()
    cout << endl;

    Z* a2 = new Z();  //F() Z()
    cout << endl;

    //Z* a3 = new F();  错误

    a->FuncA();  //F:FunA()
    a1->FuncA();  //F:FunA()
    a2->FuncA();  //Z:FunA()  如果子类没有相应的函数,那么会调用父类的函数

    a->FuncB();  //F:FunB()
    a1->FuncB();  //Z:FunB()
    a2->FuncB();  //Z:FunB()

    int k5 = a->k5;  //10
    int k4 = a1->k5;  //10
    int k3 = a2->k5;  //5

    //int k55 = a->k4;  k4是保护成员,无法访问

    delete a;  //~F()
    cout << endl;

    delete a1;  //如果父类析构函数加virtual 那么会多一个子类的析构函数 ~Z()  ~F() 
    cout << endl;

    delete a2;  //~Z()  ~F()
    cout << endl;


    system("pause");

    return 0;
}

2.继承的访问权限

(1)类继承访问权限

父类的private成员无法被继承

(1)public继承:父类的public/protected成员继承到子类的访问权限不变

(2)private继承:父类的public/protected成员继承到子类变为private

(3)protected继承:父类的public/protected成员继承到子类变为protected

(2)成员访问权限

(1)private:①能被基类函数 ②能被友元函数 访问,无法被基类对象访问

(2)protected:①能被基类函数 ②能被友元函数 ③能被子类函数 访问,无法被基类对象访问

(3)public:①能被基类函数 ②能被友元函数 ③能被子类函数 ④能被基类对象

四.多态

多态有四种形态:

1.虚函数多态(动态多态,在运行时确定,覆盖)

2.模板多态

3.重载(静态多态,在编译时确定)

4.转换

猜你喜欢

转载自www.cnblogs.com/k5bg/p/11691615.html