C++之抽象基类与纯虚函数
生活随笔
收集整理的這篇文章主要介紹了
C++之抽象基类与纯虚函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// Vitual_Base.cpp : Defines the entry point for the console application.
//抽象基類與純虛函數#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)//使用參數列表{}void print()const //防止在函數體內修改變量的值{cout << "( " << x << ", " <<y<<")"<< endl;}
};//聲明一個圖形類,作為其他類的基類
class Figure//組合類
{
private:Point center;
public:Figure(double i = 0, double j = 0) :center(i, j)//注意復合類初始化與繼承類初始化的異同{}Point & location()//為了避免拷貝,不產生臨時變量使用引用{return center;}void move(Point p){center = p;//改變圖形的中心點draw();//調用draw()函數對圖形重新繪制}//純虛函數:虛函數只有聲明,沒有實現,函數體=0virtual void draw() = 0;//繪制圖形,但不知道是什么圖形,因此并不知道他的具體實現virtual void rotate(double) = 0;//旋轉函數,也沒有實現
};//聲明一個類。繼承于圖形類
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中的純虛函數進行實現{cout << "A circle with center ";location().print();//打印圓的中心cout << " and radius " << radius << endl;}void rotate(double a)//旋轉一個圓,雖然沒有任何效果,但必須rotate()函數必須實現{cout << " no effect.\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;}//頂點數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不能構造抽象類的對象f->draw();f->move(Point(2, 2));g.draw();//使用父類引用調用虛函數g.rotate(1);g.move(Point(1, 1));s.vertices();system("pause");return 0;
}
/*那么子類是不是必須實現基類中所有的純虛函數?
是:因為子類不實現所有的純虛函數子類依然是一個抽象類
不是:因為子類擁有了基類的函數,但是純虛函數沒有實現,因此子類必須實現才行
因此:
(1) 純虛函數:虛函數只有聲明,函數體=0,就是一個純虛函數,純虛函數沒有函數體
,不需要實現,在子類里實現純虛函數的具體功能(2)抽象基類:擁有純虛函數的類叫抽象基類,抽象類只能作為基類,不能構建對象,因
為抽象類中的純虛函數沒有函數體,即沒有實現部分(3)抽象類提供了不同子類對象的一個通用接口(4)純虛函數被定義在派生類中,如果派生類不重寫基類的純虛函數,則派生類也是一個
抽象類
*/
總結
以上是生活随笔為你收集整理的C++之抽象基类与纯虚函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++之虚析构函数
- 下一篇: C++之菱形继承的解决之道