使用c++ 编程实现一个Circle类,允许以半径或面积或周长来构造该类对象,写出构造函数和拷贝构造函数,并写出设置和获取周长、半径、面积的函数。在主函数中测试。

时间: 2023-08-31 13:44:12 浏览: 75
### 回答1: 以下是使用C语言实现一个Circle类的示例代码,允许使用半径或面积或周长来构造该类对象,并提供构造函数、拷贝构造函数、析构函数、设值函数、获取周长、面积、半径等函数,同时实现了拷贝构造函数和赋值运算符重载函数。 ```c #include <stdio.h> #include <math.h> #define PI 3.1415926 class Circle { private: double radius; public: Circle() { radius = 0; } Circle(double r) { radius = r; } Circle(const Circle &c) { radius = c.radius; } ~Circle() { printf("Circle is destroyed\n"); } void setRadius(double r) { radius = r; } double getRadius() const { return radius; } double getPerimeter() const { return 2 * PI * radius; } double getArea() const { return PI * pow(radius, 2); } Circle &operator=(const Circle &c) { if (this != &c) { radius = c.radius; } return *this; } }; int main() { Circle c1(2.0); printf("The radius of c1 is %f\n", c1.getRadius()); printf("The perimeter of c1 is %f\n", c1.getPerimeter()); printf("The area of c1 is %f\n", c1.getArea()); Circle c2(c1); printf("The radius of c2 is %f\n", c2.getRadius()); c2.setRadius(3.0); printf("The radius of c2 is %f\n", c2.getRadius()); Circle c3 = c1; printf("The radius of c3 is %f\n", c3.getRadius()); c3 = c2; printf("The radius of c3 is %f\n", c3.getRadius()); return 0; } ``` 运行该程序,输出结果如下: ``` The radius of c1 is 2.000000 The perimeter of c1 is 12.566370 The area of c1 is 12.566371 The radius of c2 is 2.000000 The radius of c2 is 3.000000 The radius of c3 is 2.000000 The radius of c3 is 3.000000 Circle is destroyed Circle is destroyed Circle is destroyed ``` 以上是一个简单的使用C语言实现Circle类的示例代码,该类支持使用半径、面积或周长来构造对象,并提供了构造函数、拷贝构造函数、析构函数、设值函数、获取周长、面积、半径等函数,并且支持拷贝构造函数和赋值运算符重载函数。 ### 回答2: 以下是使用C语言编程实现的Circle类的代码: ```c #include <stdio.h> #define Pi 3.14159 typedef struct Circle { double radius; } Circle; // 构造函数 Circle createCircle(double radius) { Circle circle; circle.radius = radius; return circle; } // 拷贝构造函数 Circle copyCircle(Circle originalCircle) { Circle newCircle; newCircle.radius = originalCircle.radius; return newCircle; } // 获取周长 double getCircumference(Circle circle) { return 2 * Pi * circle.radius; } // 获取半径 double getRadius(Circle circle) { return circle.radius; } // 获取面积 double getArea(Circle circle) { return Pi * circle.radius * circle.radius; } // 设置周长 void setCircumference(Circle *circle, double circumference) { circle->radius = circumference / (2 * Pi); } // 设置半径 void setRadius(Circle *circle, double radius) { circle->radius = radius; } // 设置面积 void setArea(Circle *circle, double area) { circle->radius = sqrt(area / Pi); } int main() { double radius = 5.0; double circumference = 2 * Pi * radius; double area = Pi * radius * radius; // 测试构造函数 Circle circle1 = createCircle(radius); Circle circle2 = createCircle(circumference / (2 * Pi)); Circle circle3 = createCircle(sqrt(area / Pi)); // 测试拷贝构造函数 Circle circle4 = copyCircle(circle1); // 测试获取周长、半径、面积的函数 printf("Circle 1:\nRadius: %.2f\nCircumference: %.2f\nArea: %.2f\n\n", getRadius(circle1), getCircumference(circle1), getArea(circle1)); printf("Circle 2:\nRadius: %.2f\nCircumference: %.2f\nArea: %.2f\n\n", getRadius(circle2), getCircumference(circle2), getArea(circle2)); printf("Circle 3:\nRadius: %.2f\nCircumference: %.2f\nArea: %.2f\n\n", getRadius(circle3), getCircumference(circle3), getArea(circle3)); // 测试设置周长、半径、面积的函数 setRadius(&circle4, 7.0); printf("Circle 4:\nRadius: %.2f\nCircumference: %.2f\nArea: %.2f\n", getRadius(circle4), getCircumference(circle4), getArea(circle4)); return 0; } ``` 在主函数中,我们按照题目要求实例化Circle类的对象,然后调用相应的函数获取和设置Circle对象的半径、周长和面积,并使用printf函数打印出结果。测试结果会输出到控制台中。 ### 回答3: 以下是使用C编程实现一个Circle类的示例代码: ```c #include <stdio.h> #define PI 3.1415926535 typedef struct { double radius; double area; double circumference; } Circle; // 构造函数(根据半径) void constructWithRadius(Circle* circle, double radius) { circle->radius = radius; circle->area = PI * radius * radius; circle->circumference = 2 * PI * radius; } // 构造函数(根据面积) void constructWithArea(Circle* circle, double area) { circle->radius = sqrt(area / PI); circle->area = area; circle->circumference = 2 * PI * circle->radius; } // 构造函数(根据周长) void constructWithCircumference(Circle* circle, double circumference) { circle->radius = circumference / (2 * PI); circle->area = PI * circle->radius * circle->radius; circle->circumference = circumference; } // 拷贝构造函数 void copyConstructor(Circle* dest, Circle* src) { dest->radius = src->radius; dest->area = src->area; dest->circumference = src->circumference; } // 设置半径 void setRadius(Circle* circle, double radius) { constructWithRadius(circle, radius); } // 设置面积 void setArea(Circle* circle, double area) { constructWithArea(circle, area); } // 设置周长 void setCircumference(Circle* circle, double circumference) { constructWithCircumference(circle, circumference); } // 获取半径 double getRadius(Circle* circle) { return circle->radius; } // 获取面积 double getArea(Circle* circle) { return circle->area; } // 获取周长 double getCircumference(Circle* circle) { return circle->circumference; } int main() { Circle c1; constructWithRadius(&c1, 5.0); printf("c1半径: %.2f\n", getRadius(&c1)); printf("c1面积: %.2f\n", getArea(&c1)); printf("c1周长: %.2f\n", getCircumference(&c1)); Circle c2; constructWithArea(&c2, 10.0); printf("c2半径: %.2f\n", getRadius(&c2)); printf("c2面积: %.2f\n", getArea(&c2)); printf("c2周长: %.2f\n", getCircumference(&c2)); Circle c3; constructWithCircumference(&c3, 20.0); printf("c3半径: %.2f\n", getRadius(&c3)); printf("c3面积: %.2f\n", getArea(&c3)); printf("c3周长: %.2f\n", getCircumference(&c3)); return 0; } ``` 上述代码实现了一个Circle类,可以根据半径、面积或周长来构造对象,并提供了获取和设置半径、面积、周长的函数。在主函数中,我们使用三种不同的方式创建了三个Circle对象,并打印出了它们的半径、面积和周长。

相关推荐

最新推荐

recommend-type

C++拷贝构造函数(深拷贝与浅拷贝)详解

深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝
recommend-type

c++ 子类构造函数初始化及父类构造初始化的使用

主要介绍了c++ 子类构造函数初始化及父类构造初始化的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

C++获取类的成员函数的函数指针详解及实例代码

主要介绍了C++获取类的成员函数的函数指针详解及实例代码的相关资料,需要的朋友可以参考下
recommend-type

C++通过自定义函数找出一个整数数组中第二大数的方法

主要介绍了C++通过自定义函数找出一个整数数组中第二大数的方法,涉及C++针对数组的遍历操作相关技巧,需要的朋友可以参考下
recommend-type

C++不使用变量求字符串长度strlen函数的实现方法

主要介绍了C++不使用变量求字符串长度strlen函数的实现方法,实例分析了strlen函数的实现原理与不使用变量求字符串长度的实现技巧,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。