类的嵌套定义、使用以及用头文件实现多个文件编程(匠心之作C++ p105 22 )

我的方法1:

 1 #include<iostream>
 2 
 3 class Point{
 4     int cX,cY;
 5 public:
 6     void setPoint(int x,int y){
 7         cX=x;cY=y;
 8     }
 9     int getPointX(){
10         return cX;
11     }
12     int getPointY(){
13         return cY;
14     }
15 };
16 class Circle{
17     int cRadius;Point cCenter;
18 public:
19     void setCircle(int radius,Point center){
20         cRadius=radius;cCenter=center;
21     }
22     int getRadius(){
23         return cRadius;
24     }
25     int getCenterX(){
26         return cCenter.getPointX();
27     }
28     int getCenterY(){
29         return cCenter.getPointY();
30     }
31 };
32 int main(){
33     Point p1,cp;Circle c1;
34     p1.setPoint(7,0);cp.setPoint(0,0);
35     c1.setCircle(8,cp);
36     if((c1.getCenterX()-p1.getPointX())*(c1.getCenterX()-p1.getPointX())+
37         (c1.getCenterY()-p1.getPointY())*(c1.getCenterY()-p1.getPointY())>
38         c1.getRadius()*c1.getRadius())
39         std::cout<<"点在圆外\n"<<std::endl;
40     else if(((c1.getCenterX()-p1.getPointX())*(c1.getCenterX()-p1.getPointX())+
41         (c1.getCenterY()-p1.getPointY())*(c1.getCenterY()-p1.getPointY())==
42         c1.getRadius()*c1.getRadius()))
43         std::cout<<"点在圆上\n"<<std::endl;
44     else
45         std::cout<<"点在圆内\n"<<std::endl;
46     system("pause");
47     return 0;
48 }

 老师的做法:

 1 #include<iostream>
 2 class Point{
 3     int cX,cY;
 4 public:
 5     void setPoint(int x,int y){
 6         cX=x;cY=y;
 7     }
 8     int getPointX(){
 9         return cX;
10     }
11     int getPointY(){
12         return cY;
13     }
14 };
15 class Circle{
16     int cRadius;Point cCenter;
17 public:
18     void setCircle(int radius,Point center){
19         cRadius=radius;cCenter=center;
20     }
21     int getRadius(){
22         return cRadius;
23     }
24     Point getCenter(){
25         return cCenter;
26     }
27 };
28 int main(){
29     Point p1,cp;//声明2个点,p1是任意点,cp是圆心
30     Circle c1; //声明圆
31     p1.setPoint(0,5); //赋值点
32     cp.setPoint(0,0); //赋值圆心
33     c1.setCircle(6,cp); //设置圆的半径及圆心
34 
35     if((c1.getCenter().getPointX()-p1.getPointX())*
36         (c1.getCenter().getPointX()-p1.getPointX())+
37         (c1.getCenter().getPointY()-p1.getPointY())*
38         (c1.getCenter().getPointY()-p1.getPointY())>
39         c1.getRadius()*c1.getRadius())
40         std::cout<<"点在圆外\n\n";
41     else if((c1.getCenter().getPointX()-p1.getPointX())*
42         (c1.getCenter().getPointX()-p1.getPointX())+
43         (c1.getCenter().getPointY()-p1.getPointY())*
44         (c1.getCenter().getPointY()-p1.getPointY())==
45         c1.getRadius()*c1.getRadius())
46         std::cout<<"点在圆上\n\n";
47     else
48         std::cout<<"点在圆内\n\n";
49     system("pause");
50     return 0;
51 }

 多文件实现方法,point.h:

 1 #pragma once
 2 #include<iostream>
 3 class Point{
 4 public:
 5     int cX,cY;
 6 public:
 7     void setPoint(int x,int y);
 8     int getPointX();
 9     int getPointY();
10 };

circle.h:

 1 #pragma once
 2 #include<iostream>
 3 #include"point.h"
 4 class Circle{
 5     int cRadius;Point cCenter;
 6 public:
 7     void setCircle(int radius,Point center);
 8     int getRadius();
 9     Point getCenter();
10 };

point.cpp

 1 #include "point.h"
 2 void Point::setPoint(int x,int y){
 3     cX=x;cY=y;
 4 }
 5 int Point::getPointX(){
 6     return cX;
 7 }
 8 int Point::getPointY(){
 9     return cY;
10 }

circle.cpp

 1 #include"circle.h"
 2 
 3 void Circle::setCircle(int radius,Point center){
 4     cRadius=radius;cCenter=center;
 5 }
 6 int Circle::getRadius(){
 7     return cRadius;
 8 }
 9 Point Circle::getCenter(){
10     return cCenter;
11 }

 

主函数circle3.cpp:

 1 #include<iostream>
 2 #include"circle.h"
 3 #include"point.h"
 4 int main(){
 5     Point p1,cp;//声明2个点,p1是任意点,cp是圆心
 6     Circle c1; //声明圆
 7     p1.setPoint(0,9); //赋值点
 8     cp.setPoint(0,0); //赋值圆心
 9     c1.setCircle(6,cp); //设置圆的半径及圆心
10     int distance=(c1.getCenter().getPointX()-p1.getPointX())*
11         (c1.getCenter().getPointX()-p1.getPointX())+
12         (c1.getCenter().getPointY()-p1.getPointY())*
13         (c1.getCenter().getPointY()-p1.getPointY());
14 
15     if(distance>c1.getRadius()*c1.getRadius())
16         std::cout<<"点在圆外\n\n";
17     else if(distance==c1.getRadius()*c1.getRadius())
18         std::cout<<"点在圆上\n\n";
19     else
20         std::cout<<"点在圆内\n\n";
21     system("pause");
22     return 0;
23 }

 

转载于:https://www.cnblogs.com/GoldCrop/p/11521037.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ 中,解决头文件互相依赖的问题可以通过前向声明和分离接口和实现两种方式。 一、前向声明 前向声明是指在头文件中声明一个而不包含它的定义。这样,在其他文件包含该头文件时,就可以通过的指针或引用使用,而不需要包含该定义。 例如,假设有两个 A 和 B,它们互相依赖。可以在 A 的头文件中声明 B,而不包含 B 的定义: ```c++ // A.h class B; // 前向声明 class A { public: A(); void foo(B* b); }; ``` 然后在 A.cpp 文件中包含 B 的头文件,并实现 A 的成员函数: ```c++ // A.cpp #include "A.h" #include "B.h" A::A() {} void A::foo(B* b) { // 使用 B 型指针 } ``` 同样,也可以在 B 的头文件中声明 A: ```c++ // B.h class A; // 前向声明 class B { public: B(); void bar(A* a); }; ``` 然后在 B.cpp 文件中包含 A 的头文件,并实现 B 的成员函数: ```c++ // B.cpp #include "B.h" #include "A.h" B::B() {} void B::bar(A* a) { // 使用 A 型指针 } ``` 二、分离接口和实现 另一种解决头文件互相依赖的方法是将接口和实现分离到不同的文件中。接口包含的声明和定义,而实现只包含的成员函数的实现。 例如,假设有两个 A 和 B,它们互相依赖。可以将它们的接口和实现分别放到不同的文件中: A.h: ```c++ // A.h class B; // 前向声明 class A { public: A(); void foo(B* b); private: int a; }; ``` A.cpp: ```c++ // A.cpp #include "A.h" #include "B.h" A::A() {} void A::foo(B* b) { // 使用 B 型指针 } ``` B.h: ```c++ // B.h class A; // 前向声明 class B { public: B(); void bar(A* a); private: int b; }; ``` B.cpp: ```c++ // B.cpp #include "B.h" #include "A.h" B::B() {} void B::bar(A* a) { // 使用 A 型指针 } ``` 这样,如果其他文件需要使用 A 或 B 的接口,只需要包含相应的头文件即可。如果需要使用 A 或 B 实现,只需要链接相应的实现文件即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值