C++類和對象深入探索之分文件編寫點和圓的關(guān)系詳解
創(chuàng)建圓心類
point.h
#pragma once #include<iostream> using namespace std; //創(chuàng)建圓心類 class Point { public: void setM_x(int x); int getM_x(); void setM_y(int y); int getM_y(); private: int m_x; int m_y; };
把圓心的橫縱坐標設(shè)為私有,公共屬性寫了兩對成員方法,用來給圓心屬性賦值和讀取,這里只寫了方法的聲明,具體實現(xiàn)將在point.cpp文件實現(xiàn)。
point.cpp
#include"point.h" void Point::setM_x(int x) { m_x = x; } int Point::getM_x() { return m_x; } void Point::setM_y(int y) { m_y = y; } int Point::getM_y() { return m_y; }
這個文件就是point頭文件中定義成員方法的具體實現(xiàn)了,引入point.h頭文件,在四個方法的返回值類型和方法名面前加::,表示屬于圓心類的方法,然后完成賦值和取值的實現(xiàn)。
創(chuàng)建圓類
Circle.h
#pragma once #include<iostream> #include "point.h" using namespace std; //創(chuàng)建 Circle 類 class Circle { public: void setM_r(int r); int getM_r(); void setCenter(Point ¢er); Point getCenter(); private: int m_r; Point m_center; };
這里和point.h類似,設(shè)置了圓心和圓半徑的屬性并設(shè)置為私有;在公共權(quán)限下定義為半徑賦值和取值的方法;對于圓心,我引入point.h的頭文件,在圓類中創(chuàng)建了圓心m_center,設(shè)置圓心方法中采用引用傳參,將圓心類完成賦值的圓心傳入到圓類中;獲取圓心的途徑是通過 getCenter 方法調(diào)用point 類中的 get 方法。
Circle.cpp
#include"Circle.h" void Circle::setM_r(int r) { m_r = r; } int Circle::getM_r() { return m_r; } void Circle::setCenter(Point ¢er) { m_center = center; } Point Circle::getCenter() { return m_center; }
引入Circle.h頭文件,將.h的方法完成具體實現(xiàn)。
判斷點圓關(guān)系函數(shù)
void relative(Circle& c, Point& p) { //圓心到點距離的平方為distance int distance = (c.getCenter().getM_x() - p.getM_x()) * (c.getCenter().getM_x() - p.getM_x()) + (c.getCenter().getM_y() - p.getM_y()) * (c.getCenter().getM_y() - p.getM_y()); //半徑的平方 rDistance int rDistance = c.getM_r() * c.getM_r(); if (distance > rDistance) cout << "點在圓外" << endl; else if (distance == rDistance) cout << "點在圓上" << endl; else cout << "點在圓內(nèi)" << endl; }
數(shù)學(xué)上點和圓的關(guān)系是圓心到點的距離和半徑的比較,這里我把等號兩邊平方,比較兩個數(shù)據(jù)的大小即可;若距離大于半徑,點在圓外;距離等于半徑,點在圓上;距離小于半徑,點在圓內(nèi);relative 函數(shù)傳入Circle 類和 Point 類的對象,分別計算圓心到點距離的平方 distance和半徑的平方 rDistance,利用多重If語句輸出不同結(jié)果即可。
最終實現(xiàn)
#include"Circle.h" void relative(Circle& c, Point& p) { //圓心到點距離的平方為distance int distance = (c.getCenter().getM_x() - p.getM_x()) * (c.getCenter().getM_x() - p.getM_x()) + (c.getCenter().getM_y() - p.getM_y()) * (c.getCenter().getM_y() - p.getM_y()); //半徑的平方 rDistance int rDistance = c.getM_r() * c.getM_r(); if (distance > rDistance) cout << "點在圓外" << endl; else if (distance == rDistance) cout << "點在圓上" << endl; else cout << "點在圓內(nèi)" << endl; } int main() { int x = 0, y = 0, a = 0, b = 0, r = 0; Circle C; Point center, P; cout << "圓心橫坐標 x 為:"; cin >> x; cout << endl; cout << "圓心縱坐標 y 為:"; cin >> y; cout << endl; center.setM_x(x); center.setM_y (y); C.setCenter(center); cout << "此圓 半徑 r 為:"; cin >> r; cout << endl; C.setM_r(r); cout << "點橫坐標 x 為:"; cin >> a; cout << endl; cout << "點縱坐標 y 為:"; cin >> b; cout << endl; P.setM_x(a); P.setM_y(b); relative(C, P); }
主函數(shù)創(chuàng)建Circle類對象 C,和Point 類對象 P,center;通過set方法設(shè)置center點的坐標并傳入C的setCenter方法中,這樣圓心數(shù)據(jù)賦值完成,然后利用相同方法對圓半徑以及點賦值,最后調(diào)用relative函數(shù)比較即可,附上三種運行結(jié)果,如下:
總結(jié)
這個案例應(yīng)該是很好理解的,總共是五個文件,兩個.h三個.cpp。這樣看著非常的舒服和整潔,建議大家在做稍微復(fù)雜的項目或者案例時可以多利用分文件編寫,那么C++實現(xiàn)點和圓的關(guān)系到此結(jié)束,期待你的鼓勵和支持
到此這篇關(guān)于C++類和對象深入探索之分文件編寫點和圓的關(guān)系詳解的文章就介紹到這了,更多相關(guān)C++分文件編寫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中實現(xiàn)fibonacci數(shù)列的幾種方法
本文主要介紹了C++中實現(xiàn)fibonacci數(shù)列的幾種方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01