C++編程邏輯講解step by step:類之間的交互

題目

設計一個點類Point,再設計一個矩形類,矩形類使用Point類的兩個坐標點作為矩形的對角頂點。并可以輸出4個坐標值和面積。


分析

1.點類,自然維護的是一個點的坐標,

#include < iostream >
using namespace std;
class Point{//點類
private:
int x, y;//私有成員變量,坐標
public :
Point()//無參數的構造方法,對xy初始化
Point(int a, int b)
void setXY(int a, int b)
int getX()//得到x的方法
int getY()//得到有的函數
};

2.矩形類,有兩個點就能確定了

如果希望寫的完整,那么就要增加一個函數init(),維護另外兩個點,因為兩個對角的點坐標有一定的相關性。

class Rectangle	//矩形類
{
private:
Point point1, point2;
public :
Rectangle();//類Point的無參構造函數已經對每個對象做初始化啦,這里不用對每個點多初始化了
Rectangle(Point one, Point two)
Rectangle(int x1, int y1, int x2, int y2)
int getArea()//計算面積的函數	
};

3.函數的實現

Point :: Point()//無參數的構造方法,對xy初始化{x = 0;y = 0;
}
Point :: Point(int a, int b){x = a;y = b;	
}
void Point ::setXY(int a, int b)
{x = a;y = b;
}
int Point :: getX()//得到x的方法
{return x;
}
int Point :: getY()//得到有的函數{return y;
}
};
Rectangle :: Rectangle(){};//類Point的無參構造函數已經對每個對象做初始化,這里不用對每個點做初始化了
Rectangle ::Rectangle(Point one, Point two)
{point1 = one;point4 = two;init();
}
Rectangle :: Rectangle(int x1, int y1, int x2, int y2){point1.setXY(x1, y1);point4.setXY(x2, y2);init();
}
void Rectangle :: init()//給另外兩個點做初始化的函數{point2.setXY(point4.getX(), point1.getY() );point3.setXY(point1.getX(), point4.getY() );
}	
void Rectangle :: printPoint()//打印四個點的函數{   init();
cout<<"A:("<< point1.getX() <<","<< point1.getY() <<")"<< endl;
cout<<"B:("<< point2.getX() <<","<< point2.getY() <<")"<< endl;
cout<<"C:("<< point3.getX() <<","<< point3.getY() <<")"<< endl;
cout<<"D:("<< point4.getX() <<","<< point4.getY() <<")"<< endl;
}
int Rectangle :: getArea()//計算面積的函數
{int height, width, area;height = point1.getY() - point3.getY();width = point1.getX() - point2.getX();area = height * width;if(area > 0)return area;elsereturn -area;
}};
void main()
{
Point *p1 = new Point (-15, 56), *p2 = new Point (89, -10);//定義兩個點
Rectangle *r1 = new Rectangle (*p1, *p2);//用兩個點做參數,聲明一個矩形對象r1
Rectangle *r2 = new Rectangle (1, 5, 5, 1);//用兩隊左邊,聲明一個矩形對象r2
cout<<"矩形r1的4個定點坐標:"<< endl;
r1->printPoint();
cout<<"矩形r1的面積:"<< r1->getArea() << endl;
cout<<"\n矩形r2的4個定點坐標:"<< endl;
r2->printPoint();
cout<<"矩形r2的面積:"<< r2->getArea() << endl;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39622.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39622.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39622.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C語言基礎知識點】C語言-使用 fgets 讀取包含空格的字符串

使用 fgets 讀取包含空格的字符串 // 使用 fgets 讀取包含空格的字符串 #include <stdio.h> #include <string.h> int main() { char name[100]; printf("Enter your name: "); fgets(name, sizeof(name), stdin); // 移除可能讀取到的換行符 n…

Matlab/simulink三段式電流保護

電流1段仿真波形如下所示 電流2段仿真波形如下所示 電流3段仿真波形如下所示

Centos7安裝Minio筆記

一、Minio概述 Minio是一款開源的對象存儲服務器&#xff0c;可以運行在多種操作系統上&#xff0c;包括Linux、Windows和MacOS等。提供一種簡單、可擴展、高可用的對象存儲解決方案&#xff0c;支持多種數據格式&#xff0c;包括對象、塊和文件等。Minio是一款強大、靈活、可…

WCCI 2024第三彈:忍者表演驚艷全場,盛大晚宴不容錯過

WCCI 2024第三彈&#xff1a;忍者表演驚艷全場&#xff0c;盛大晚宴不容錯過&#xff01; 會議之眼 快訊 會議介紹 IEEE WCCI&#xff08;World Congress on Computational Intelligence&#xff09;2024&#xff0c;即2024年IEEE世界計算智能大會&#xff0c;于6月30日至7月…

【前端知識】一篇速成 建議收藏

HTML基礎概念 正式敲代碼之前呢,我們先來看幾個概念: 0 靜態網頁和動態網頁 靜態網頁: 頁面的內容和顯示效果就基本上不會發生變化了--除非你修改頁面代碼。 動態網頁: 頁面代碼雖然沒有變&#xff0c;但是顯示的內容卻是可以隨著時間、環境或者數據庫操作的結果而發生改變的…

【康復學習--LeetCode每日一題】3099. 哈沙德數

題目&#xff1a; 如果一個整數能夠被其各個數位上的數字之和整除&#xff0c;則稱之為 哈沙德數&#xff08;Harshad number&#xff09;。給你一個整數 x 。如果 x 是 哈沙德數 &#xff0c;則返回 x 各個數位上的數字之和&#xff0c;否則&#xff0c;返回 -1 。 示例 1&a…

【Qt知識】window frame 對窗口坐標的影響

在Qt中&#xff0c;窗口框架&#xff08;Window Frame&#xff09;對Widget的尺寸計算和坐標定位有著直接的影響&#xff0c;這主要是因為窗口框架本身占據了一定的空間&#xff0c;包括標題欄、最小化/最大化/關閉按鈕以及邊框。這部分額外的空間在不同的應用場景下需要被考慮…

windows非白名單exe監控并殺死

需求&#xff1a;孩子在家用電腦上網課&#xff0c;總是悄悄打開游戲或視頻軟件 方案&#xff1a;指定白名單exe&#xff0c;打開非白名單的就自動被殺死&#xff0c;并記錄日志供查看 不知道是否還有更好的結果方案&#xff1f; import psutil import time import logging#…

2024.7.4 刷題總結

2024.7.4 **每日一題** 3086.拾起k個1需要的最少行動次數&#xff0c;在這道題我們可以把0看成空位&#xff0c;第二種操作相當于把一個1移動到和它相鄰的空位上&#xff0c;而第一種操作則是貪心地把和當前下標相鄰的0變成1;當maxchanges較大時&#xff0c;優先使用第一種操作…

第二十條:與抽象類相比,優先選擇接口

要定義多種實現的類型&#xff1a;JAVA有兩種機制&#xff1a;接口和抽象類。這兩種機制都支持為某些實例方法提供實現&#xff0c;但二者有個重要的區別&#xff1a;要實現由抽象類定義的類型&#xff0c;這個類必須是抽象類的子類。因為Java只允許單繼承&#xff0c;對抽象類…

使用SSE實現echarts數據實時更新

區別 SSE 和 WebSocket 原理和實現方式的區別 SSE( Server-Sent Events) SSE 是基于傳統的 HTTP 協議實現的&#xff0c;采用了長輪詢&#xff08;long-polling&#xff09;機制。客戶端通過向服務器發送一個 HTTP 請求&#xff0c;服務器保持連接打開并周期性地向客戶端發送…

內網穿透--利用everything實現目錄映射

免責聲明:本文僅做技術交流與學習... 目錄 來源文章 frp下載網址 為了隱藏: 演示: 1-靶機的everything開啟http服務 2-Linux服務器: 3-靶機windows: 4-最后訪問: 來源文章 滲透測試技巧|Everything的利用 frp下載網址 Release v0.58.1 fatedier/frp GitHub 為了隱…

協程調度模塊

什么是協程和協程調度&#xff1f; 基本概念 協程 協程是一種比線程更輕量級的并發編程結構&#xff0c;它允許在函數執行過程中暫停和恢復執行狀態&#xff0c;從而實現非阻塞式編程。協程又被稱為用戶級線程&#xff0c;這是由于協程包括上下文切換在內的全部執行邏輯都是…

WAIC熱點聚焦|具身智能簡介:AI新浪潮的領跑者

WAIC熱點聚焦|具身智能簡介&#xff1a;AI新浪潮的領跑者 引言 隨著"具身智能"&#xff08;Embodied Intelligence&#xff09;的火熱討論&#xff0c;2024年標志著人機交互新時代的開啟。在大模型技術的推動下&#xff0c;機器人響應語音指令成為現實&#xff0c;…

Linux Rsyslog+LogAnalyzer+MariaDB部署日志服務器

文章目錄 Linux RsyslogLogAnalyzerMariaDB部署日志服務器1 環境準備1.1 服務器端安裝LAMP環境1.2 服務啟動并加入開機啟動1.2.1 Apache1.2.2 MariaDB1.2.3 Php 2 Rsyslog服務端安裝及配置2.1 安裝Rsyslog及Rsyslog連接MySQL的模塊2.2 導入rsyslog-mysql數據庫文件2.3 查看剛導…

深入淺出:npm常用命令詳解與實戰

theme: smartblue npm是什么 npm&#xff08;Node Package Manager&#xff09;是Node.js平臺的默認包管理器&#xff0c;它讓JavaScript開發者能夠輕松地共享、管理和使用彼此編寫的代碼模塊。npm不僅僅是一個安裝工具&#xff0c;它還是一個全面的生態系統&#xff0c;用于發…

【YOLOv5/v7改進系列】替換損失函數為WIOU、CIOU、GIOU、SIOU、DIOU、EIOU、Focal C/G/S/D/EIOU等

一、導言 在目標檢測任務中&#xff0c;損失函數的主要作用是衡量模型預測的邊界框&#xff08;bounding boxes&#xff09;與真實邊界框之間的匹配程度&#xff0c;并指導模型學習如何更精確地定位和分類目標。損失函數通常由兩部分構成&#xff1a;分類損失&#xff08;用于…

RabbitMQ入門教程(精細版二帶圖)

目錄 六 RabbitMQ工作模式 6.1Hello World簡單模式 6.1.1 什么是簡單模式 6.1.2 RabbitMQ管理界面操作 6.1.3 生產者代碼 6.1.4 消費者代碼 6.2 Work queues工作隊列模式 6.2.1 什么是工作隊列模式 6.2.2 RabbitMQ管理界面操作 6.2.3 生產者代碼 6.2.4 消費者代碼 …

清理測試數據用truncate還是delete

truncate和delete的區別&#xff0c;我相信大家都清楚。 truncate會清空表的全部數據&#xff0c;且自增主鍵會重置&#xff1b;而delete可以按條件刪除&#xff0c;且自增主鍵不會重置。 我們日常測試過程中經常要刪除掉測試數據&#xff0c;那么應該用truncate刪&#xff0c…

Java中繼承接口和實現接口的區別、接口和抽象類的區別、并理解關鍵字interface、implements

初學者容易把繼承接口和實現接口搞混&#xff0c;專門整理一下&#xff0c;順便簡單介紹一下interface、implements關鍵字。 繼承接口和實現接口的區別、接口的特點 繼承接口是說的只有接口才可以繼承接口&#xff0c;是接口與接口間的。實現接口是說的接口與類之間&#xff…