C++面向对象程序设计作业(一)

一些关于构造函数需要注意的点:

1、C++类中是可以只有有参构造函数的,但是需要注意的是,如果没有提供无参构造函数,那么在创建对象时就必须显式地传递参数,否则会编译出错。另外,如果我们在类中不提供任何构造函数,则编译器会自动为该类生成一个无参构造函数。因此,如果只提供有参构造函数,则需要特别注意是否需要提供无参构造函数。

2、C++类中是不可以只有拷贝构造函数的。如果只提供了拷贝构造函数,那么在创建对象时必须提供一个已有对象来进行拷贝构造(但是只有拷贝函数就无法创建已有对象),否则编译器会报错。此外,如果我们不提供任何构造函数,则编译器会自动为该类生成一个默认的无参构造函数和拷贝构造函数。因此,如果只提供了拷贝构造函数,则需要特别注意是否要提供无参构造函数和其他类型的构造函数

题一:

创建矩形Rectangle类,有保护的int类型的成员变量r_long长和r_width宽;无参数的构造函数和有参数(参数没有默认值)的构造函数;其他成员函数comp_area()计算并返回矩形的面积,成员函数comp_perimeter()计算并返回矩形的周长,成员函数get_long()返回矩形的长;成员函数get_width()返回矩形的宽。 

主函数要求:

1.无参构造矩形对象A

2.输入整数a、b,通过a、b构造矩形对象B

3.输出A的长、宽

4.输出B的长、宽

5.输出A的面积

6.输出B的周长

代码:

#include 
using namespace std;
class Rectangle {
private:
    int r_long; // 长
    int r_width; // 宽
public:
    Rectangle(int long_value, int width_value) { // 有参数构造函数
        r_long = long_value;
        r_width = width_value;
    }
    Rectangle() { // 无参数构造函数
       
    }
    int comp_area() { // 计算并返回矩形的面积
        return r_long * r_width;
    }
    int comp_perimeter() { // 计算并返回矩形的周长
        return 2 * (r_long + r_width);
    }
    int get_long() { // 返回矩形的长
        return r_long;
    }
    int get_width() { // 返回矩形的宽
        return r_width;
    }
};
int main() {
    // 无参构造矩形对象A
    Rectangle A;
    // 输入整数a、b,通过a、b构造矩形对象B
    int a, b;
    cout << "请输入矩形B的长:";
    cin >> a;
    cout << "请输入矩形B的宽:";
    cin >> b;
    Rectangle B(a, b);
    // 输出A的长、宽
    cout << "矩形A的长为:" << A.get_long() << ",宽为:" << A.get_width() << endl;
    // 输出B的长、宽
    cout << "矩形B的长为:" << B.get_long() << ",宽为:" << B.get_width() << endl;
    // 输出A的面积
    cout << "矩形A的面积为:" << A.comp_area() << endl;
    // 输出B的周长
    cout << "矩形B的周长为:" << B.comp_perimeter() << endl;
    return 0;
}

题二:

创建球Ball类,有保护的double型成员radius,其他成员请根据主程序要求自行设计,主程序要求:

  1. 输入半径、构造球类对象A;

  2. 输出A球的表面积、体积

  3. 拷贝构造新的球类对象B;

  4. B半径扩大一倍;

  5. 输出B球的表面积、体积;

代码:

#include 
#include 
using namespace std;
class Ball {
protected:
    double radius;
public:
    Ball(double radius) {
        this->radius = radius;
    }
    Ball(const Ball& other) {
        this->radius = other.radius;
    }
    double surfaceArea() const {
        return 4 * M_PI * radius * radius;
    }
    double volume() const {
        return 4.0 / 3 * M_PI * radius * radius * radius;
    }
    void setRadius(double radius) {
        this->radius = radius;
    }
    double getRadius() const {
        return radius;
    }
};
int main() {
    double radius;
    cin >> radius;
    // 构造球类对象A
    Ball A(radius);
    // 输出A球的表面积、体积
    cout << "A的表面积:" << A.surfaceArea() << endl;
    cout << "A的体积:" << A.volume() << endl;
    // 拷贝构造新的球类对象B
    Ball B(A);
    // B半径扩大一倍
    double newRadius = B.getRadius() * 2;
    B.setRadius(newRadius);
    // 输出B球的表面积、体积
    cout << "B的表面积:" << B.surfaceArea() << endl;
    cout << "B的体积:" << B.volume() << endl;
    return 0;
}

你可能感兴趣的:(c++)