最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++中抽象類詳解及其作用介紹

 更新時間:2021年09月02日 15:39:38   作者:我是小白呀  
這篇文章主要介紹了C/C++中抽象類詳解及其作用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

概述

抽象類 (abstract class), 是一些不用來定義對象, 而只作為基類被繼承的類. 由于抽象類常用作基類, 所以通常稱為抽象基類 (abstract base class).

在這里插入圖片描述

定義抽象類的唯一目的, 就是去建立派生類. 我們在抽象類基礎上要定義出功能各異的派生類, 再用這些派生類去建立對象.

抽象類 vs 具體類

凡是包含純虛函數(shù)的類都是抽象類. 純虛函數(shù)不用實現(xiàn), 故不能被調(diào)用, 抽象類無法建立對象. 抽象類的作用是作為一個類簇的共同基類, 即為一個類簇提供一個公共接口.

在這里插入圖片描述

許多好的面向?qū)ο蟮南到y(tǒng), 其層次結(jié)構(gòu)的頂部是一個抽象類, 甚至頂部有好幾層都是抽象類. 如果在抽象類所派生出的新類中對基類的所有純虛數(shù)進行了定義. 那么這些函數(shù)就被賦予了具體的功能, 可以被調(diào)用. 這個派生類就不是抽象類, 而是可以用來定義對象的具體類 (concrete class).

如果在派生類中每有對所有純函數(shù)進行定義, 則此派生類仍然是抽象類, 不能用來定義對象.

案例

創(chuàng)建基類 Shape (形狀), 作為抽象類. Point (點), Circle (園) 是 Shape 類的直接派生類和間接派生類, Cylinder (圓柱體) 是 Shape 的間接派生類.

Shape 類:

#ifndef PROJECT6_SHAPE_H
#define PROJECT6_SHAPE_H

class Shape {
public:
    virtual double area() const {return 0.0;}
    virtual double volume() const {return 0.0;}
    virtual void shapeName() const = 0;
};

#endif //PROJECT6_SHAPE_H

Point:

#ifndef PROJECT6_POINT_H
#define PROJECT6_POINT_H

#include <iostream>
#include "Shape.h"
using namespace std;

class Point : public Shape{
private:
    double a, b;
public:
    Point(double p1, double p2) : a(p1), b(p2) {};
    virtual void shapeName() const {  // 對虛函數(shù)進行再定義
        cout << "This is point with a = "<< a <<" b = " << b << endl;
    }
};

#endif //PROJECT6_POINT_H

Circle:

#ifndef PROJECT6_CIRCLE_H
#define PROJECT6_CIRCLE_H

#include <iostream>
#include "Shape.h"
using namespace std;

class Circle : public Shape{
protected:
    double r;
public:
    Circle(double radius) : r(radius) {};
    virtual void shapeName() const {  // 對虛函數(shù)進行再定義
        cout << "This is circle with r = "<< r << endl;
    }
};

#endif //PROJECT6_CIRCLE_H

Cylinder 類:

#ifndef PROJECT6_CYLINDER_H
#define PROJECT6_CYLINDER_H

#include <iostream>
#include "Circle.h"
using namespace std;

class Cylinder : public Circle{
private:
    double h;
public:
    Cylinder(double r, double height) : Circle(r), h(height) {};
    virtual void shapeName() const {  // 對虛函數(shù)進行再定義
        cout << "This is circle with r = "<< r << " h = " << h << endl << endl;
    }
};

#endif //PROJECT6_CYLINDER_H

main:

#include <iostream>
#include "Shape.h"
#include "Point.h"
#include "Circle.h"
#include "Cylinder.h"
using namespace std;

int main() {
    // 創(chuàng)建對象
    Point point1(1.2, 2.3);  // 點對象
    Circle circle1(2.5);  // 圓對象
    Cylinder cylinder1(3.5, 7);

    point1.shapeName();
    circle1.shapeName();
    cylinder1.shapeName();

    Shape *pt;  // 指向基類的指針
    pt = &point1;
    pt->shapeName();
    pt = &circle1;
    pt->shapeName();
    pt = &cylinder1;
    pt->shapeName();

    return 0;
}

輸出結(jié)果:

This is point with a = 1.2 b = 2.3
This is circle with r = 2.5
This is circle with r = 3.5 h = 7

This is point with a = 1.2 b = 2.3
This is circle with r = 2.5
This is circle with r = 3.5 h = 7

抽象類的作用

雖然說抽象類不能定義對象, 但是可以定義指向抽象類數(shù)據(jù)的指針變量. 當派生類稱為具體類之后, 就可以用這種指針指向派生類對象. 然后通過該指針調(diào)用虛函數(shù), 實現(xiàn)多態(tài)性的操作.

抽象類接口是面向?qū)ο蟪绦蛟O計中的核心概念, 是各種設計模式中必需的機制.

總結(jié)

  • 一個基類如果包含一個或一個以上純虛函數(shù), 就是抽象基類
  • 抽象類不能也不必要定義對象
  • 抽象基類與普通基類不同, 它不是現(xiàn)實存在的對象的抽象
  • 在類的層次結(jié)構(gòu)中, 頂層或最上面的幾層可以是抽象基類. 抽象基類體現(xiàn)了類族各類的共性, 把各類中共有的成員函數(shù)集中在抽象基類中聲明
  • 抽象類是類族的公共接口
  • 利用虛函數(shù)和多態(tài)性, 我們可以讓執(zhí)行環(huán)境處理特殊性, 減少工作量和工作難度

到此這篇關(guān)于C/C++中抽象類詳解及其作用介紹的文章就介紹到這了,更多相關(guān)C++抽象類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • c++ 如何實現(xiàn)線程注入

    c++ 如何實現(xiàn)線程注入

    本文主要介紹了各種API遠程線程注入的方法,分別是 遠程線程注入,普通消息鉤子注入,全局消息鉤子注入,APC應用層異步注入,ZwCreateThreadEx強力注入,純匯編實現(xiàn)的線程注入等
    2021-06-06
  • C語言中#pragma預處理指令的使用

    C語言中#pragma預處理指令的使用

    在所有的預處理指令中,#pragma指令可能是最復雜的了,它的作用是設定編譯器的狀態(tài)或者是指示編譯器完成一些特定的動作,本文主要介紹了C語言中#pragma預處理指令的使用,感興趣的可以了解一下
    2023-12-12
  • c++數(shù)組排序的5種方法實例代碼

    c++數(shù)組排序的5種方法實例代碼

    大家還在為大小排序而煩惱嗎?今天讓我我大家解決這個問題吧,下面這篇文章主要給大家介紹了關(guān)于c++數(shù)組排序的5種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • C#復制和深度復制的實現(xiàn)方法

    C#復制和深度復制的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狢#復制和深度復制的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C++數(shù)組和指針的區(qū)別與聯(lián)系

    C++數(shù)組和指針的區(qū)別與聯(lián)系

    這篇文章主要介紹了C++數(shù)組和指針的區(qū)別與聯(lián)系,數(shù)組是具有固定大小和連續(xù)內(nèi)存空間的相同數(shù)據(jù)集合,指針是指存放內(nèi)存地址的變量,更多詳細資料請參考下面文章內(nèi)容
    2022-01-01
  • C++ COM編程之QueryInterface函數(shù)(一)

    C++ COM編程之QueryInterface函數(shù)(一)

    這篇文章主要介紹了C++ COM編程之QueryInterface函數(shù)(一),QueryInterface是組件本身提供對自己查詢的一個接口,需要的朋友可以參考下
    2014-10-10
  • C++實現(xiàn)簡易通訊錄功能

    C++實現(xiàn)簡易通訊錄功能

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡易通訊錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++實現(xiàn)自底向上的歸并排序算法

    C++實現(xiàn)自底向上的歸并排序算法

    這篇文章主要介紹了C++實現(xiàn)自底向上的歸并排序算法,結(jié)合實例形式較為詳細的分析總結(jié)了自底向上的歸并排序算法的原理與具體實現(xiàn)技巧,需要的朋友可以參考下
    2015-12-12
  • 詳解C++11中綁定器bind的原理與使用

    詳解C++11中綁定器bind的原理與使用

    C++11中引入的function機制,其中綁定器主要有三種:bind1st、bind2nd、bind(C++11)。本文就來和大家聊聊這些綁定器的底層實現(xiàn)原理與使用場景,需要的可以參考一下
    2022-12-12
  • 詳解C++中的四種類型轉(zhuǎn)換運算符

    詳解C++中的四種類型轉(zhuǎn)換運算符

    隱式類型轉(zhuǎn)換是安全的,顯式類型轉(zhuǎn)換是有風險的,C語言之所以增加強制類型轉(zhuǎn)換的語法,就是為了強調(diào)風險,讓程序員意識到自己在做什么,本文將給大家詳細介紹一下C++中的四種類型轉(zhuǎn)換運算符,需要的朋友可以參考下
    2023-09-09

最新評論

麻栗坡县| 乌鲁木齐市| 柳林县| 交口县| 灵武市| 襄汾县| 夏邑县| 灵寿县| 大厂| 西华县| 抚州市| 南投市| 乐至县| 红安县| 汝阳县| 岢岚县| 韶山市| 虞城县| 周宁县| 普格县| 郴州市| 海原县| 麻江县| 萨嘎县| 玛多县| 贵定县| 永吉县| 敦化市| 静海县| 麻江县| 潼南县| 庐江县| 寿阳县| 苏尼特左旗| 南皮县| 日喀则市| 阳谷县| 阳江市| 乌鲁木齐市| 山阴县| 东乡县|