第8,9,10,11,12章-類整理

keenkenen發表於2020-12-14

8章-類1

二級目錄

三級目錄

9章-類2

二級目錄

資訊保護-const物件,資料成員,成員函式,引用,指標

const: 即只讀模式
常物件:
資料成員的值不能被改變,
定義時就初始化
常物件 只能呼叫const成員函式
普通物件 卻也能呼叫const成員函式

二級目錄

10章-運算子過載

二級目錄

二級目錄

11章-繼承與派生

二級目錄

二級目錄

12章-虛擬函式與多型

習題

1 基類point下的 circle square move

繪製旋轉圖形

#include <iostream>
using namespace std;
class Point 
{
	double x;
	double y;
public:
	Point (double i,double j):x(i),y(j){}
	void print ()const//不能改變資料成員 ,只是把這個座標列印出來 
	{
		cout<<"("<<x<<","<<y<<")";
	}
 };
 class Figure
 {
 		Point center;
 	public:
 		Figure(double i=0,double j=0):center(i,j){ }
 		Point& location()
 		{
 			return center;//把它的個center物件成員弄到手 
		 }
		 void move(Point p)
		 {
		 	center=p;//改變其座標物件的值 
		 	draw();//然後再畫出這個改變後的figure,draw函式在下邊 
		 }
		 virtual void draw()=0;
		 virtual void rotate(double)=0;
  }; 
  
class Circle:public Figure
{
	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)//
	 {
	 	cout<<"no effect operation.\n";
	 }
};
class Square:public Figure
{
	double side;
	double angle;
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 betwen one side and the x-axis is "<<angle<<endl;
	}
	void rotate(double a)
	{
		angle+=a;
		cout<<"the angle between one side and the x-airs 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 d;
//	f=new Figure(10,10);//這兩個建立抽象類的操作非法 


	f->draw();//f為基類指標,通過->訪問。而g為引用直接用點.訪問即可。 
	f->rotate(1);
	f->move(Point(2,2))	;
	
	g.draw();
	g.rotate(1);
	g.move(Point(1,1));
	
	s.vertices();
//	g.vertices();//非法,基類指標不能訪問非繼承所得的成員 ,見下圖解釋
	return 0;
}

知識點補充:
課本沒說,老師ppt裡有要求

2

【例12-5】先建立一個Point(點)類,包含資料成員x,y(座標點)。以它為基類,派生出一個Circle(圓)類,增加資料成員r(半徑),再以Circle類為直接基類,派生出一個Cylinder(圓柱體)類,再增加資料成員h(高)。要求編寫程式,過載運算子“<<”和“>>”,使之能用於輸出以上類物件。
分析:對於一個比較大的程式,應當分成若干步驟進行。先宣告基類,再宣告派生類,逐級進行,分步除錯。

在這裡插入程式碼片

3 老師ppt結尾的打怪例題–增強可擴充性示例***

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

1

1

1

相關文章