极简c++(5)对象指针和对象数组

对象指针

在这里插入图片描述

this指针

在这里插入图片描述
当前对象!
在这里插入图片描述

动态创建对象

new和delete (与c语言中的malloc和free一样)
在这里插入图片描述
在这里插入图片描述

申请和释放动态数组(对象数组)

在这里插入图片描述

在这里插入图片描述

作业

在这里插入图片描述

#include<iostream>
using namespace std;

class Rectangle{
	private:
		int width, height;
        static int count;
	public:
		Rectangle();//无参构造函数
		Rectangle(int newwidth,int newheight);//有参构造函数
        ~Rectangle();
        static void getCount(){cout<<"矩形个数:"<<count<<endl;}
		//内联函数,设置属性的值,一般只有这种很短的函数才可以写在定义中
		//this 表示的是当前对象的意思
		void setWidth(int width)
		{
			this->width = width;
		}
		void setHeight(int height)
		{
			this->height = height;
		}
		//获得属性的值
		int getWidth()
		{
			return width;
		}
		int getHeight()
		{
			return height;
		}
        int getArea(){
            int area = this->width * this->height;
            return area;
        }
        int getPerimeter(){
            int Perimeter = (this->width + this->height)*2;
            return Perimeter;
        }
		
};

int Rectangle::count = 0;

Rectangle::Rectangle(){
	this->width = 1;
	this->height = 1;
    cout<<"创建矩形"<<endl;
    count++;
}
Rectangle::Rectangle(int newwidth,int newheight){
	this->width = newwidth;
	this->height = newheight;
    cout<<"创建矩形"<<endl;
    count++;
}
Rectangle::~Rectangle(){
    cout<<"消除矩形"<<endl;
    count--;
}


int main(){
	Rectangle rect[3] = {Rectangle(3,4),Rectangle(7,6),Rectangle(5,6)};
    for(int i = 0;i<3;i++){
        int W1 = rect[i].getWidth();
        int H1 = rect[i].getHeight();
        int A1 = rect[i].getArea();
        int P1 = rect[i].getPerimeter();
	    cout<<"矩形的长为:"<<W1<<endl<<"矩形的宽为:"<<H1<<endl<<"矩形的面积为:"<<A1<<endl<<"矩形的周长为:"<<P1<<endl;
    }
}
运行结果:
创建矩形
创建矩形
创建矩形
矩形的长为:3
矩形的宽为:4
矩形的面积为:12
矩形的周长为:14
矩形的长为:7
矩形的宽为:6
矩形的面积为:42
矩形的周长为:26
矩形的长为:5
矩形的宽为:6
矩形的面积为:30
矩形的周长为:22
消除矩形
消除矩形
消除矩形

对象的生成和消亡都由系统自己决定,如果使用new动态生成,一定要delete去除;
在这里插入图片描述
指针数组是存放在栈里面的,main结束了那么就清除了;
而对象是存放在堆里面的,main结束了如果没有及时去delete掉,那么他们就会失去指向,变成孤儿;

#include<iostream>
using namespace std;

class Rectangle{
	private:
		int width, height;
        static int count;
	public:
		Rectangle();//无参构造函数
		Rectangle(int width,int height);//有参构造函数
        ~Rectangle();
        static void getCount(){cout<<"矩形个数:"<<count<<endl;}
		//内联函数,设置属性的值,一般只有这种很短的函数才可以写在定义中
		//this 表示的是当前对象的意思
		void setWidth(int width)
		{
			this->width = width;
		}
		void setHeight(int height)
		{
			this->height = height;
		}
		//获得属性的值
		int getWidth()
		{
			return width;
		}
		int getHeight()
		{
			return height;
		}
        int getArea(){
            int area = this->width * this->height;
            return area;
        }
        int getPerimeter(){
            int Perimeter = (this->width + this->height)*2;
            return Perimeter;
        }
		
};

int Rectangle::count = 0;

Rectangle::Rectangle(){
	this->width = 1;
	this->height = 1;
    cout<<"创建矩形"<<endl;
    count++;
}
Rectangle::Rectangle(int width,int height){
	this->width = width;
	this->height = height;
    cout<<"创建矩形"<<endl;
    count++;
}
Rectangle::~Rectangle(){
    cout<<"消除矩形"<<endl;
    count--;
}


int main(){
    const int N = 3;
	Rectangle *pRctangle[N];
    int width,height;
    for(int i = 0;i<N;i++){
        cout<<"请输入矩形"<<i+1<<"的长和宽"<<endl;
        cin>>width>>height;
        pRctangle[i] = new Rectangle(width,height);
        int W1 = pRctangle[i]->getWidth();
        int H1 = pRctangle[i]->getHeight();
        int A1 = pRctangle[i]->getArea();
        int P1 = pRctangle[i]->getPerimeter();
	    cout<<"矩形的长为:"<<W1<<endl<<"矩形的宽为:"<<H1<<endl<<"矩形的面积为:"<<A1<<endl<<"矩形的周长为:"<<P1<<endl;
    }
     for(int i = 0;i<N;i++){
        delete pRctangle[i];
    }
    
}
运行结果:
请输入矩形1的长和宽
3 4
创建矩形
矩形的长为:3
矩形的宽为:4
矩形的面积为:12
矩形的周长为:14
请输入矩形2的长和宽
5 6
创建矩形
矩形的长为:5
矩形的宽为:6
矩形的面积为:30
矩形的周长为:22
请输入矩形3的长和宽
7 8
创建矩形
矩形的长为:7
矩形的宽为:8
矩形的面积为:56
矩形的周长为:30
消除矩形
消除矩形
消除矩形

思考:为什么不能用delete [] Rectangle;?
在这里插入图片描述
在这里插入图片描述

Rectangle是静态创建的,不是动态创建的,这种方式只能删除静态创建的
用了几次new,就用几次delete。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值