C++基础语法——类与对象作业、类的静态成员作业、对象数组作业

描述:创建一个矩形类,要有两种构造函数,计算他的周长和面积。然后在这个基础上增加静态变量count来计数(类与对象作业、类的静态成员作业)

#include <iostream>
using namespace std;
class Rectangle 
{
    private:
        double width;
        double height;
        static int count;
    public:
        Rectangle(double width = 0.1, double height = 0.1) {
            this -> width = width;
            this -> height = height;
            count++;
        } //构造函数,可以以两种方式调用

        ~Rectangle() {
            count--;
        } //内容为空

        double getWidth() {
            //注意这种函数不需要参数
            return width;
        }
        double getHeight() {
            return height;
        } //get函数

        double setWidth() {
            this -> width = width;
        }
        double setHeight() {
            this -> height = height;
        } //set函数

        double getArea() {
            return width * height;
        }
        double getPerimeter() {
            return (width + height) * 2;
        }

        static int getCount() {
            return count;
        } //增加一个返回静态属性的函数

        void display() {
            cout << "width =" << getWidth() << "height =" << getHeight();
            cout << "Area =" << getArea() << "Perimeter =" << getPerimeter();
            cout << "矩形对象的个数为:" << Rectangle::getCount() << endl; //调用类中函数的形式要注意加上作用域运算符
        }
};

int Rectangle :: count = 0; //静态属性要在类的外面进行初始化

        dispaly函数用来显示对象的基本信息。注意输出语句不要太长,在这里分成了两条来写。

int main() 
{
    double width, height;
    Rectangle r1;
    cout << "输出第一个缺省的矩形对象的信息:" << endl;
    r1.display(); //显示基本信息

    cout << "输入矩形的宽度和高度(width, height):";
    cin >> width >> height;
    Rectangle r2(width, height);
    cout << "输出第二个带参矩形的信息" << endl;
    r2.display();
    return 0;
}

                这样的程序其实还不够好。当系统规模比较大的时候,把类放在一个普通的cpp文件之中并不是最好的办法,会带来管理的问题。所以应该尽量按照类名称定义文件存储名。应该把类的声明部分放在Rectangle.h文件中,把实现部分放在Rectangle.cpp,包含了main函数的那个cpp文件可以看成是测试程序,可以随便命名。

Rectangle.h
//声明类,包含了所有函数的函数头,注意,不要写函数体。
Rectangle.cpp
//具体实现类,所有成员函数的具体代码写在这里,比如:
Rectangle :: Rectangle(double wdith = 0.1, double height = 0.1) {
        this -> width = width;
        this -> height = height;
        count++;
}
//写好函数属于的类
job1.cpp
//创建Rectangle对象,并调用成员函数。其实就是那个main函数部分。注意:
#include "Rectangle.h"  
//最后只需要编译main函数部分

        也就是说 .h 和 .cpp 文件是成对的在定义一个类,只需要查找 .h 文件就可以知道这个类有什么功能可以用,非常方便。

对象数组作业:

1、在上面建立的矩形类的基础上,创建一个对象数组,用这样的语句声明对象数组,放在main函数之中

Rectangle rect[3] = {Rectangle(3,4), Rectangle(7,6), Rectangle(5,6)};

        思考点:什么时候释放内存

2、创建一个指针数组,定义形式如下

Rectangle *pRectangle[3];

        思考点:指针数组的内存和所生成的对象所占据的内存分别在什么时候释放

//注意点
//1、在构造函数和析构函数中增加输出语句
缺省的构造函数:Default Constructor called
含参数的构造函数: Constructor called
析构函数: Destructor called
//2、静态对象数组:
//对象数组的N的定义:
const int N = 3;
Rectangle rect[N] = {Rectangle(3, 4), Rectangle(5, 6), Rectangle(7, 6)};
//3、动态对象数组
Rectangle *rect = new Rectangle[num];
rect[0].setWidth(3.0);
rect[0].setHeight(4.0); //在这里不会自动调用析构函数,所以需要调用delete语句
delete [] rect;

总结:静态对象数组,系统在main函数结束时自动释放。如果是new语句的动态对象数组,则是需要自己用delete释放
//指向对象的指针数组,每一个指针指向一个对象
Rectangle *pRectangle[3];
//循环输入每个对象的信息。每个元素(对象)在for循环的反括号结束时就消亡了。
这个指针数组是静态创建的,(虽然他的元素是一个一个用new动态分配空间的)所以不能用这种方式释放内存
delete [] pRectangle;
只能用一个循环
for (i = 0; i < n; i++) {
    delete pRectangle[i];
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值