将类的定义放在头文件中,把成员函数的实现代码放在一个cpp文件中
生活随笔
收集整理的這篇文章主要介紹了
将类的定义放在头文件中,把成员函数的实现代码放在一个cpp文件中
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
將類的定義放在頭文件中,把成員函數(shù)的實現(xiàn)代碼放在一個cpp文件中
寫這種.h和.cpp文件分開的大程序,雖然對很多人來說很簡單,對自己來說算是第一次吧,好好學C++,加油~
題目:定義Point類,由Point派生出Circle類,再由Circle派生出Cylinder類。將類的定義部分分別作為3個頭文件,對他們的成員函數(shù)的定義分別作為3個源文件
1、Point.h文件
1 #ifndef POINT_H2 #define POINT_H3 #include<iostream> //頭文件也需要包含這個4 using namespace std;5 6 class Point7 {8 protected:9 float x, y; 10 public: 11 Point(float a = 0, float b = 0); //帶默認參數(shù)的構(gòu)造函數(shù)的聲明 12 float getX(); 13 float getY(); 14 void setPoint(float, float); 15 friend ostream& operator<<(ostream &output, const Point &p); //運算符重載 16 17 }; 18 19 #endif2、Circle.h文件
1 #ifndef CIRCLE_H2 #define CIRCLE_H3 4 #include "Point.h"5 6 class Circle:public Point7 {8 public:9 Circle(float a = 0, float b = 0, float r = 0); 10 float getR(); 11 void setR(float r); 12 float area(); 13 friend ostream& operator<<(ostream &output, Circle &c); //運算符重載 14 protected: 15 float radius; 16 }; 17 18 #endif3、Cylinder.h文件
1 #ifndef CYLINDER_H2 #define CYLINDER_H3 4 #include "Circle.h"5 6 class Cylinder :public Circle7 {8 public:9 Cylinder(float a = 0, float b = 0, float r = 0, float h = 0); 10 void setH(float h); 11 float getH(); 12 float area(); 13 float volume(); 14 friend ostream& operator<<(ostream &, Cylinder &); 15 private: 16 float height; 17 }; 18 19 #endif4、Point.cpp文件
1 #include<iostream>2 #include"Point.h"3 using namespace std;4 5 Point::Point(float a, float b)6 {7 x = a;8 y = b;9 } 10 11 float Point::getX() 12 { 13 return x; 14 } 15 float Point::getY() 16 { 17 return y; 18 } 19 void Point::setPoint(float a, float b) 20 { 21 x = a; 22 y = b; 23 } 24 25 ostream& operator<<(ostream &output, const Point &p) //重載運算符“<<” 26 { 27 output << "(" << p.x << "," << p.y << ")" << endl; 28 return output; 29 }5、Circle.cpp文件
1 #include<iostream>2 #include"Circle.h"3 using namespace std;4 5 Circle::Circle(float a, float b, float r) :Point(a, b), radius(r) { }6 7 float Circle::getR()8 {9 return radius; 10 } 11 12 void Circle::setR(float r) 13 { 14 radius = r; 15 } 16 17 float Circle::area() 18 { 19 return 3.14*radius*radius; 20 } 21 22 ostream& operator<<(ostream &output, Circle &c) //運算符重載 23 { 24 output << "圓心:(" << c.x << "," << c.y << ") 半徑:" << c.radius << " 面積:" << c.area() << endl; 25 return output; 26 }?
6、Cylinder.cpp文件
1 #include<iostream>2 #include"Cylinder.h"3 using namespace std;4 5 Cylinder::Cylinder(float a, float b, float r, float h) :Circle(a, b, r), height(h) { }6 7 void Cylinder::setH(float h)8 {9 height = h; 10 } 11 12 float Cylinder::getH() 13 { 14 return height; 15 } 16 17 float Cylinder::area() 18 { 19 return 2 * Circle::area() + 2 * 3.14*radius*height; 20 } 21 22 float Cylinder::volume() 23 { 24 return Circle::area()*height; 25 } 26 27 ostream& operator<<(ostream &output, Cylinder &cy) //cy.area() 屬于同名覆蓋 28 { 29 output << "圓心:(" << cy.x << "," << cy.y << ") 半徑:" << cy.radius << " 高:" << cy.height << "\n 面積: " << cy.area() << " 體積:" << cy.volume() << endl; 30 return output; 31 }7、main函數(shù)
1 //習題6.12 //#include<iostream>3 //#include"Point.h"4 //#include"Circle.h"5 #include"Cylinder.h"6 //using namespace std;7 8 int main()9 { 10 Cylinder cy1(3, 3, 5, 6); 11 cout << "original cylinder:" << cy1 << endl; 12 cy1.setPoint(-2, -2); 13 cy1.setR(8); 14 cy1.setH(10); 15 cout << "new cylinder: " << cy1 << endl; 16 Point &p1 = cy1; 17 cout << "as a point: " << p1 << endl; 18 Circle &c1 = cy1; 19 cout << "as a circle: " << c1 << endl; 20 return 0; 21 }?
運行結(jié)果:
總結(jié):
1、在寫頭文件是要注意寫
#ifndef POINT_H
#define POINT_H
……
#endif
可以避免多次包含同一頭文件,防止重定義
2、基本的頭文件要寫在.h文件中
總結(jié)
以上是生活随笔為你收集整理的将类的定义放在头文件中,把成员函数的实现代码放在一个cpp文件中的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理解几个网络硬件(调制解调器、路由器、交
- 下一篇: [Python]no encoding