C++ --> 类和对象(二)

2024-07-13 1043阅读

前言

在前面简单的介绍了OOP,什么是类,在类中的this指针。接下来就深入理解类和对象。

C++ --> 类和对象(二)
(图片来源网络,侵删)

默认成员函数

  • 默认构造函数:用于在创建对象时初始化对象的成员变量。
  • 默认拷贝构造函数:用于使用已存在的对象来初始化新创建的对象。
  • 默认析构函数:在对象生命周期结束时执行清理操作,通常是删除动态分配的资源。
  • 默认重载赋值运算符:用于将一个对象的值赋给另一个已存在的对象。
  • 默认移动构造函数(C++11及以后版本):用于将资源从一个对象转移到另一个对象,而不是复制这些资源。
  • 默认重载移动赋值操作符(C++11及以后版本):用于将一个对象的资源移动到另一个已存在的对象

    ​ 接下来就依次介绍默认成员函数

    一、构造函数

    构造函数的特性

    构造函数类似于初始化函数,在写Stack时候,首先需要初始化Stack。

    构造函数并不是开辟空间创建对象,而是初始化

    1. 函数名与类名相同
    2. 无返回值
    3. 对象实例化时编译器自动调用构造函数
    4. 构造函数可以重载
    class Date
    {
    public:
    	//构造函数
    	Date()								//无参构造函数
    	{
    	}
    	Date(int year , int month , int day )  //带参构造函数
    	{
    		_year = year;
    		_month = month;
    		_day = day;
    	}
    	void Print()
    	{
    		cout 
    	Date d0;//调用无参数构造 初始化的值是随机值
    	Date d1(2024, 7.1, 8);//调用带参构造
    	d1.Print();
    	return 0;
    }
    
    public:
    	//Date(int year, int month, int day)
    	//{
    	//	_year = year;
    	//	_month = month;
    	//	_day = day;
    	//}
    private:
    	int _year;
    	int _month;
    	int _day;
    };
    int main()
    {
    	Date d0;
    	Date d1;
    	d1.Print();
    	return 0;
    }
    
    private:
    	int _year = 1;
    	int _month = 1;
    	int _day = 1;
    };
    
        _year = year;
        _month = month;
        _day = day;
    }
    //全缺省构造函数
    Date(int year = 1, int month = 1, int day = 1)
    {
        _year = year;
        _month = month;
        _day = day;
    }
    
    	~Stack()
    	{
    		free(_a);
    		_a = nullptr;
    	}
    private:
    	int* _a;
    	int _capacity;
    	int _size;
    };
    
    public:
    	Date(int year = 1, int month = 1, int day = 1)
    	{
    		_year = year;
    		_month = month;
    		_day = day;
    	}
        // DateP(const Date d); 错误示范
    	Date(const Date& d)
    	{
    		_year = d._year;
    		_month = d._month;
    		_day = d._day;
    	}
    private:
    	int _year;
    	int _month;
    	int _day;
    };
    int main()
    {
    	Date d1(2024,7,9);
    	Date d2(d1);
    	return 0;
    }
     
    public :
     Date(int year = 1900, int month = 1, int day = 1)
       {
            _year = year;
            _month = month;
            _day = day;
       }
     
     Date (const Date& d)
       {
            _year = d._year;
            _month = d._month;
            _day = d._day;
       }
     //赋值运算符重载   
     Date& operator=(const Date& d)//返回this,用来连续赋值。
     {
     if(this != &d)
           {
                _year = d._year;
                _month = d._month;
                _day = d._day;
           }
            
            return *this;
     }
    private:
      int _year ;
     int _month ;
     int _day ;
    };
    
    	return *this += 1;
    }
    // 后置++
    Date Date::operator++(int)
    {
    	Date tmp;	
    	tmp += 1;
    	return *this;
    }
    
    	Date tmp;
    	tmp -= 1;
    	return *this;
    }
    // 前置--
    Date& Date:: operator--()
    {
    	return *this -= 1;
    }
    
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]