栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

初级C++类和对象

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初级C++类和对象

文章目录
  • 默认构造函数
  • 默认析构函数
  • 拷贝构造函数
  • *this 指针
  • 赋值重载函数
    • WoCout结尾感言

类有6个默认成员函数,都是会自动生成的,

默认构造函数
  1. 默认初始化对象的属性,编译器对内置类型不会初始化,对自定义类型会调用无参的构造函数
  2. 对象实例化时,自动调用
  3. 类名,无返回值,可无参,可全参,建议写成全缺省参数
默认析构函数
  1. 用来清理动态开辟的内存空间,无参无返回值,类名前加~
  2. 同默认构造函数一样,只会对自定义的清理
  3. 对象生命周期结束时,C++编译系统系统自动调用析构函数。
拷贝构造函数
  1. 拷贝构造函数的参数只有一个且必须使用引用传参,无返回值
    (1)一个对象以值传递的方式传入函数体
    (2)一个对象以值传递的方式从函数返回
    (3)一个对象需要通过另外一个对象进行初始化。–》都会调用拷贝构造函数,拷贝构造无差别拷贝内置类型和自定义类型,完成值拷贝,
  2. 实现的原理等同于menmcpy,一个个字节序的拷贝—浅拷贝。
  3. 拷贝构造函数是构造函数的一个重载形式。
  4. 但对于需要用多个栈对象来说,多次拷贝同一个栈,会使得多个栈指向的是同一块儿空间,就不合适了。
class Date
{
public:
	/Date()/无参自定义默认构造函数,,,初始化对象
	/{
	/	_year = 2022;
	/	_month = 06;
	/	_day = 07;
	/}
	/全缺省构造函数
	Date(int year = 2022, int month = 6, int day = 7)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	Date(const Date& d)/防止别人写错改了原来属性的数据和无限递归
	{
		_year = d._year;
	}
	/~Date();/默认析构函数 等其他默认函数,都是自动生成的,也可以自己写,清理动态申请的空间

	void Print();

private:/防止外人乱动我的数据
	int _year;			
	int _month;			/打补丁,给个缺省值,在没有写构造函数的情况下
	int _day;  / = 6
};

/上述简称封装 ,将对象的属性和实现细节包含在一起,并且隐藏
/通过公开接口和外部对象互动。

class Stack
{
public:
	Stack(int cap = 4)
	{
		int* a = (int*)malloc(cap * sizeof(int));
	}

	~Stack()
	{
		cout << "我就是析构函数呵呵呵" << endl;
		free(a);
	}

	void Print();

private:
	int* a;
	int top;
	int cap;
};

*this 指针

C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。

  • this指针的类型:类类型* const
  • 只能在“成员函数”的内部使用
  • this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。
  • 一般情况由编译器通过ecx寄存器自动传递,不需要户传递。
赋值重载函数
  • 编译器无法直接进行对自定义类型对象的加减乘除等,所以需要自己写一个成员函数,来实现对象之间的运算符操作,如对象的加减,比较大小等。
  • 运算符重载函数,会默认少一个参数,用隐形的this指针取代当前调用成员函数的对象,该运算符有几个操作数就需要传几个参数。还有几个不可重载的运算符,注意一下即可:.* —— :: —— sizeof ——?: ——.—— 注意以上5个运算符不能重载。
  1. 参数类型
  2. 返回值
  3. 检测是否自己给自己赋值
  4. 返回*this
  5. 一个类如果没有显式定义赋值运算符重载,编译器也会生成一个,完成对象按字节序的值拷贝。
  • 特殊的赋值运算符重载函数:应具有连续赋值的功能 a=b=c… b=c表达式返回的结果是b=c后的b,b在赋给a…
Date& operator=(const Date& d)
 {
	 if(this != &d)
	 {
		 _year = d._year;
		 _month = d._month;
		 _day = d._day;
	 }
 }
 return *this;
WoCout结尾感言

…

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/957756.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号