首页 > 其他分享 >类和对象(中)上

类和对象(中)上

时间:2025-01-17 20:03:29浏览次数:3  
标签:函数 对象 析构 Date 拷贝 构造函数

文章目录

前言

上一篇文章,我向大家讲述了类和对象(上)。这一期我将向大家介绍类和对象(中)。通过这一篇文章希望大家对构造函数、析构函数、拷贝构造函数和运算符重载函数能够有新的理解。

一、构造函数

1.构造函数的概念

构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象的时候编译器自动调用,并且在对象整个生命周期内只调用一次。

2.构造函数的作用

构造函数的作用是在创建对象的时候,完成对对象初始化的工作。

3.构造函数的特点


1.函数名与类名相同
2.构造函数无返回值
3.支持重载
4.对象实例化时编译器自动调用相应的构造函数。
5.如果类中没有显示定义构造函数,编译器会自动生成默认的无参构造函数,一旦用户显示定义,编译器将不再生成。
6.构造函数对于对象的成员变量中的内置类型不做任何处理,对于自定义类型会调用相应的构造函数。


对于上面的6点特点:我将通过例子向大家一一介绍。


class Date
{
public:
//无参构造函数
//函数名与类名相同,无返回值
//你会发现当你将默认的无参构造函数,注释掉,代码还是可以运行的
//因为类中无显示定义的构造函数,编译器会自动生成一个默认的无参构造函数
//Date()
//{
//}


/*Date(int year,int month,int day)
{
    _year = year;
    _month = month;
    _day = day;
}*/
//当你在类中显示定义构造函数,默认的无参构造函数将不会再生成了
void Print()
{
	cout << _year << " - " << _month << " - " << _day << endl;
}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d1;//注意:不能这样写Date d1();
	d1.Print();
	return 0;
}

在这里插入图片描述


对于第6点再写一个构造函数来辅助理解。

class Time
{
public:
	Time()
	{
		cout << "Time" << endl;
	}
private:
	int _hour;
	int _minute;
	int _second;
};
class Date
{
public:
	Date(int year = 0,int month = 1,int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
void Print()
{
	cout << _year << "-" << _month << "-" << _day << endl;
}
private:
	int _year;
	int _month;
	int _day;

	Time t1;
};
int main()
{
	Date d1;//创建对象d1
	Date d2(2025, 1, 12);//创建对象d2
	d1.Print();
	d2.Print();
	return 0;
}

在这里插入图片描述

输出结果分析:创建对象的时候,会自动调用相应的构造函数
创建d1对象,对于内置类型(int char double …)不做任何处理,但是对于Time自定义类型,会调用其构造函数,所以会打印出Time。d2同理。


小技巧

标签:函数,对象,析构,Date,拷贝,构造函数
From: https://blog.csdn.net/2301_81339084/article/details/145092934

相关文章

  • JS — 对象、数组、函数
    对象英文名称:Object。类似于C++中的map,python中的字典,由key:value对构成。value可以是变量、数组、对象、函数等。函数定义中的this用来引用该函数的“拥有者”。例如:test.js中的内容为:letperson={//定义一个对象personname:'kitty',//对象的元......
  • C语言和C++的区别及面向对象的了解
    C语言和C++的区别语言类型:C语言:是一种面向过程的编程语言,主要关注算法和数据结构,强调对计算机硬件的直接操作和程序的执行效率。C++:是一种面向对象的编程语言,它在C语言的基础上扩展了面向对象的特性,如类、对象、继承、多态等,使得程序的结构更加清晰,可维护性和可扩展......
  • post、get请求(查询字符串参数)将对象拼接为地址栏请求参数new URLSearchParams
    constparams=newURLSearchParams({param1:'value1',param2:'value2'}).toString();该方法可将param1和param2拼接为param1=value1&param2=value2实例consturl='https://example.com/api/resource';constparams=newURLSearchP......
  • 查询、更新数组/嵌套对象
    查询、更新数组/嵌套对象我们可以对对象、对象中的元素、数组、数组中的元素进行匹配查询,甚至还可以对数组和对象相互嵌套的字段进行匹配查询/更新,下面我们从普通匹配开始讲讲如何进行匹配。普通匹配匹配记录中的嵌套字段匹配数组匹配数组匹配数组中元素匹配数组第n项......
  • Microsoft 推出 Trellis — 一种将图像转换为 3D 对象的 AI 模型
    微软Trellis:开启3D生成新纪元阅读时长:8分钟图片来源:微软研究院近日热文:全网最全的神经网络数学原理(代码和公式)直观解释欢迎关注知乎和公众号的专栏内容LLM架构专栏知乎LLM专栏知乎【柏企】公众号【柏企科技说】【柏企阅文】几周前,微软推出了一种名为Trellis的全新3D......
  • C++ 面向对象(构造 & 析构函数)
    二、构造&析构函数2.1构造和析构2.1.1功能构造函数功能构造函数在类实例化对象时用于完成对象成员的初始化,通常包括以下操作:   1.为成员变量分配内存空间   2.初始化成员变量   3.执行类似打开文件、分配资源等额外操作析构函数功能主要作用......
  • 【C++】类与对象(中上)(难点部分)
    目录 ......
  • 面向对象分析与设计Python版 控制器与多态原则
    文章目录一、控制器原则二、多态原则一、控制器原则控制器原则名称:控制器Controller应用场景:确定谁负责接收、处理和分发系统的输入事件。解决方案:系统输入事件处理的职责分给控制器对象一个控制器对象实现业务系统的所有输入事件处理和业务逻辑分发,这一类控制器......
  • Json 序列化,将对象序列化为Json字符串(此Json序列化,是“不安全的放松JSON转义”,即不会
    ///<summary>///Json序列化帮助类///</summary>publicclassJsonSerializerHelper{///<summary>///将对象序列化为Json字符串(此Json序列化,是“不安全的放松JSON转义”,即不会将物特殊符号和中文进行转码)///</summary>///<paramname="obj"></param>......
  • java面向对象继承
    1Java中的继承概念继承是面向对象编程(OOP)中的一个核心概念。在Java中,继承指的是一个类(子类)通过扩展(extends)另一个类(父类)来获得父类的属性和方法。继承有助于实现代码重用和扩展,也为多态性提供基础。继承使得子类能够拥有父类的所有非私有成员(字段、方法),同时子类还可以......