日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++之抽象基类与纯虚函数

發(fā)布時間:2025/3/20 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++之抽象基类与纯虚函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
// Vitual_Base.cpp : Defines the entry point for the console application. //抽象基類與純虛函數(shù)#include "stdafx.h" #include<stdlib.h> #include<iostream>using namespace std;class Point { private:double x, y;public:Point(double i, double j) :x(i), y(j)//使用參數(shù)列表{}void print()const //防止在函數(shù)體內(nèi)修改變量的值{cout << "( " << x << ", " <<y<<")"<< endl;} };//聲明一個圖形類,作為其他類的基類 class Figure//組合類 { private:Point center; public:Figure(double i = 0, double j = 0) :center(i, j)//注意復(fù)合類初始化與繼承類初始化的異同{}Point & location()//為了避免拷貝,不產(chǎn)生臨時變量使用引用{return center;}void move(Point p){center = p;//改變圖形的中心點draw();//調(diào)用draw()函數(shù)對圖形重新繪制}//純虛函數(shù):虛函數(shù)只有聲明,沒有實現(xiàn),函數(shù)體=0virtual void draw() = 0;//繪制圖形,但不知道是什么圖形,因此并不知道他的具體實現(xiàn)virtual void rotate(double) = 0;//旋轉(zhuǎn)函數(shù),也沒有實現(xiàn) };//聲明一個類。繼承于圖形類 class Circle :public Figure//派生類 { private:double radius; public:Circle(double i = 0, double j = 0, double r = 0) :Figure(i, j),radius(r){}void draw()//對父類Figure中的純虛函數(shù)進行實現(xiàn){cout << "A circle with center ";location().print();//打印圓的中心cout << " and radius " << radius << endl;}void rotate(double a)//旋轉(zhuǎn)一個圓,雖然沒有任何效果,但必須rotate()函數(shù)必須實現(xiàn){cout << " no effect.\n";} }; //聲明一個正方形類,繼承于圖形類,與圓的實現(xiàn)基本類似 class Square :public Figure { private:double side;//邊長double angle;//與x軸的夾角 public:Square(double i = 0, double j = 0, double d = 0, double a = 0) :Figure(i, j) {side = d;angle = a;}void draw(){cout << "A square with center ";location().print();cout << " side length " << side << ".\n"<< " The angle between one side and the X-axis is " << angle << endl;}void rotate(double a){angle += a;cout << "The angle between one side and the X-axis is " << angle << endl;}//頂點數(shù)void vertices() { cout << "The Vertices of the square are: 3\n"; } };int main() {Circle c(1, 2, 3);Square s(4, 5, 6);Figure *f = &c;//父類指針指向子類對象Figure &g = s;Figure aFigure(10,10);//error不能構(gòu)造抽象類的對象f->draw();f->move(Point(2, 2));g.draw();//使用父類引用調(diào)用虛函數(shù)g.rotate(1);g.move(Point(1, 1));s.vertices();system("pause");return 0; } /*那么子類是不是必須實現(xiàn)基類中所有的純虛函數(shù)? 是:因為子類不實現(xiàn)所有的純虛函數(shù)子類依然是一個抽象類 不是:因為子類擁有了基類的函數(shù),但是純虛函數(shù)沒有實現(xiàn),因此子類必須實現(xiàn)才行 因此: (1) 純虛函數(shù):虛函數(shù)只有聲明,函數(shù)體=0,就是一個純虛函數(shù),純虛函數(shù)沒有函數(shù)體 ,不需要實現(xiàn),在子類里實現(xiàn)純虛函數(shù)的具體功能(2)抽象基類:擁有純虛函數(shù)的類叫抽象基類,抽象類只能作為基類,不能構(gòu)建對象,因 為抽象類中的純虛函數(shù)沒有函數(shù)體,即沒有實現(xiàn)部分(3)抽象類提供了不同子類對象的一個通用接口(4)純虛函數(shù)被定義在派生類中,如果派生類不重寫基類的純虛函數(shù),則派生類也是一個 抽象類 */

總結(jié)

以上是生活随笔為你收集整理的C++之抽象基类与纯虚函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。