C++類(lèi)和對(duì)象深入探索之分文件編寫(xiě)點(diǎn)和圓的關(guān)系詳解
創(chuàng)建圓心類(lèi)
point.h
#pragma once
#include<iostream>
using namespace std;
//創(chuàng)建圓心類(lèi)
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;
};把圓心的橫縱坐標(biāo)設(shè)為私有,公共屬性寫(xiě)了兩對(duì)成員方法,用來(lái)給圓心屬性賦值和讀取,這里只寫(xiě)了方法的聲明,具體實(shí)現(xiàn)將在point.cpp文件實(shí)現(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;
}這個(gè)文件就是point頭文件中定義成員方法的具體實(shí)現(xiàn)了,引入point.h頭文件,在四個(gè)方法的返回值類(lèi)型和方法名面前加::,表示屬于圓心類(lèi)的方法,然后完成賦值和取值的實(shí)現(xiàn)。
創(chuàng)建圓類(lèi)
Circle.h
#pragma once
#include<iostream>
#include "point.h"
using namespace std;
//創(chuàng)建 Circle 類(lèi)
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類(lèi)似,設(shè)置了圓心和圓半徑的屬性并設(shè)置為私有;在公共權(quán)限下定義為半徑賦值和取值的方法;對(duì)于圓心,我引入point.h的頭文件,在圓類(lèi)中創(chuàng)建了圓心m_center,設(shè)置圓心方法中采用引用傳參,將圓心類(lèi)完成賦值的圓心傳入到圓類(lèi)中;獲取圓心的途徑是通過(guò) getCenter 方法調(diào)用point 類(lèi)中的 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的方法完成具體實(shí)現(xiàn)。
判斷點(diǎn)圓關(guān)系函數(shù)
void relative(Circle& c, Point& p)
{
//圓心到點(diǎn)距離的平方為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 << "點(diǎn)在圓外" << endl;
else if (distance == rDistance) cout << "點(diǎn)在圓上" << endl;
else cout << "點(diǎn)在圓內(nèi)" << endl;
}數(shù)學(xué)上點(diǎn)和圓的關(guān)系是圓心到點(diǎn)的距離和半徑的比較,這里我把等號(hào)兩邊平方,比較兩個(gè)數(shù)據(jù)的大小即可;若距離大于半徑,點(diǎn)在圓外;距離等于半徑,點(diǎn)在圓上;距離小于半徑,點(diǎn)在圓內(nèi);relative 函數(shù)傳入Circle 類(lèi)和 Point 類(lèi)的對(duì)象,分別計(jì)算圓心到點(diǎn)距離的平方 distance和半徑的平方 rDistance,利用多重If語(yǔ)句輸出不同結(jié)果即可。
最終實(shí)現(xiàn)
#include"Circle.h"
void relative(Circle& c, Point& p)
{
//圓心到點(diǎn)距離的平方為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 << "點(diǎn)在圓外" << endl;
else if (distance == rDistance) cout << "點(diǎn)在圓上" << endl;
else cout << "點(diǎn)在圓內(nèi)" << endl;
}
int main()
{
int x = 0, y = 0, a = 0, b = 0, r = 0;
Circle C;
Point center, P;
cout << "圓心橫坐標(biāo) x 為:"; cin >> x; cout << endl;
cout << "圓心縱坐標(biāo) 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 << "點(diǎn)橫坐標(biāo) x 為:"; cin >> a; cout << endl;
cout << "點(diǎn)縱坐標(biāo) y 為:"; cin >> b; cout << endl;
P.setM_x(a);
P.setM_y(b);
relative(C, P);
}主函數(shù)創(chuàng)建Circle類(lèi)對(duì)象 C,和Point 類(lèi)對(duì)象 P,center;通過(guò)set方法設(shè)置center點(diǎn)的坐標(biāo)并傳入C的setCenter方法中,這樣圓心數(shù)據(jù)賦值完成,然后利用相同方法對(duì)圓半徑以及點(diǎn)賦值,最后調(diào)用relative函數(shù)比較即可,附上三種運(yùn)行結(jié)果,如下:



總結(jié)
這個(gè)案例應(yīng)該是很好理解的,總共是五個(gè)文件,兩個(gè).h三個(gè).cpp。這樣看著非常的舒服和整潔,建議大家在做稍微復(fù)雜的項(xiàng)目或者案例時(shí)可以多利用分文件編寫(xiě),那么C++實(shí)現(xiàn)點(diǎn)和圓的關(guān)系到此結(jié)束,期待你的鼓勵(lì)和支持
到此這篇關(guān)于C++類(lèi)和對(duì)象深入探索之分文件編寫(xiě)點(diǎn)和圓的關(guān)系詳解的文章就介紹到這了,更多相關(guān)C++分文件編寫(xiě)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言基于EasyX庫(kù)實(shí)現(xiàn)有顏色彈跳小球
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言基于EasyX庫(kù)實(shí)現(xiàn)有顏色彈跳小球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
vscode調(diào)試使用make編譯的項(xiàng)目
VSCode本身是一個(gè)代碼編輯器,自帶的編譯功能比較弱,本文主要介紹了vscode調(diào)試使用make編譯的項(xiàng)目,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
VSCode插件開(kāi)發(fā)全攻略之package.json詳解
這篇文章主要介紹了VSCode插件開(kāi)發(fā)全攻略之package.json的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
C語(yǔ)言 函數(shù)指針(指向函數(shù)的指針)詳解
本文主要介紹 C語(yǔ)言函數(shù)指針的知識(shí),這里整理了詳細(xì)的資料及示例代碼以便大家學(xué)習(xí)參考,有需要學(xué)習(xí)此部分知識(shí)的朋友可以參考下2016-08-08
淺談十進(jìn)制小數(shù)和二進(jìn)制小數(shù)之間的轉(zhuǎn)換
下面小編就為大家?guī)?lái)一篇淺談十進(jìn)制小數(shù)和二進(jìn)制小數(shù)之間的轉(zhuǎn)換。小編覺(jué)得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
linux內(nèi)核select/poll,epoll實(shí)現(xiàn)與區(qū)別
這篇文章主要介紹了linux內(nèi)核select/poll,epoll實(shí)現(xiàn)與區(qū)別,需要的朋友可以參考下2016-11-11
C++調(diào)用Go方法的字符串傳遞問(wèn)題及解決方案
這篇文章主要介紹了C++調(diào)用Go方法的字符串傳遞問(wèn)題及解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
C語(yǔ)言實(shí)現(xiàn)與電腦玩剪刀石頭布游戲
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)C語(yǔ)言實(shí)現(xiàn)和電腦玩剪刀石頭布游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-11-11
一文搞懂C++中的四種強(qiáng)制類(lèi)型轉(zhuǎn)換
很多朋友向小編了解C語(yǔ)言中怎么進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換呢?在這小編告訴大家強(qiáng)制類(lèi)型轉(zhuǎn)換可以分為兩種,一種是隱式類(lèi)型轉(zhuǎn)換一種是顯示類(lèi)型轉(zhuǎn)換,下面通過(guò)示例代碼給大家介紹下,需要的朋友參考下吧2021-07-07

