0422 嵌入式学习笔记(27)complex/this指针/初始化列表/析构函数

文章目录

          • complex(){}
            • this指针
            • 初始化列表
          • 析构函数

构造函数
特点:
1、函数名和类名相同
2、无返回值
优点: 实例对象会自动调用构造函数
缺点:调用时机是固定的,不灵活

complex(){}

1、构造函数允许重载
2、每一个类都有自带的默认构造函数
3、一旦你自己定义了构造函数,会将原本系统默认的构造函数覆盖
4、构造函数没有返回值
5、类complex的复制构造函数不能带有complex类型的参数
6、类的对象作为参数传入,会调用复制构造函数,产生新的对象

this指针

保存的是当前对象的地址;对应的对象方法形参都会多一个相应类型的this指针,传参时,将对象的地址传递给this
当类没有复制构造函数的时候,=的作用就只是引用(s4)

初始化列表

语义:定义并初始化
处理一些特殊的成员属性:
<引用:定义必须初始化
const成员:定义必须初始化
成员对象(无默认构造函数:无参构造函数):实例对象时会自动调用构造函数(定义并初始化)>
注:初始化列表的效率要高于在构造函数内部初始化;建议优先使用初始化列表!

Test (int num,const char *ptr) : num(num),m_str(ptr), l_ref(num), count(1)
{
	//this->num = nnum;
	//l_ref = num;
	//this-.count = l;
}

匿名对象:生命周期只存在于创建的那一行代码,超过那一行会立刻被释放

析构函数

将构造函数进行解析
c++中的类可以定义一个特殊的成员函数清理对象,这个特殊的成员函数叫做析构函数
语法~ClassName()
特点:
无参
没有返回值
当释放空间的时候它会被自动调用
作用:
清理成员的分配的空间

#include
using namespace std;

class complex
{
	public:
		complex(int real,in vir)
		{
			//有参构造函数
			cout << "number constructor !" << endl;
			this->real = real;
			this->vur = vir;
		}
		complex()
		{
			//无参构造函数
			cout << "no number constructor !" << endl;
		}
		complex(const complex &s1)//用对象给自己赋值
		{
			//复制构造函数
			cout << "copy constructor !" << endl;
			this->real = s1.real;
			this->vur = s1.vur;
		}
		
		complex& add(complex& s1)
		{
			static complex s2;
			s2.real = this->real+s1.real;;//实部加实部
			s2.vur = this->vur + s1.vur;//虚部加虚部
			return s2;
		}
		void show()
		{
			cout<<real<<"+"<<vur<<"i"<<endl;
		}
		
	private:
		int real;
		int vur;
};
int main()
{
	complex s1(1,2);//初始化
	/*complex s2;
	complex s3(s1);*/
	complex s2(2,3);
	
	complex s3;
	//complex s4 = s1;
	s3 = s1.add(s2);
	s3.show();
	
	return 0;
}

friend关键字:友元函数

在堆上进行对象空间申请的时候不会调用构造函数

关键字:new delete

int main()
{
	complex *t1 = new complex;//进行空间的申请
	int *a = new int[10];//new还可以进行数组的申请
	delete t1;//释放
return 0;
}
//会自动调用构造函数和析构函数

初始化表:const修饰的成员变量只能在初始化表进行初始化

void int show(complex &s1)const:常成员函数:该函数内不能修改任何成员变量
const * 常量指针:指针指向的东西不可修改
*const 指针常量

static:
1、该成员变量不占用成员空间
2、静态成员不归对象管(不放在对象的内存中
3、它属于整个类,整个类共享一个变量,这个类我们称之为静态成员变量

static特点
1、修饰成员变量,变量只能在类外初始化
2、属于被所有对象共享,修饰成员函数,只能操作静态成员变量

作业:完善虚数类

你可能感兴趣的:(c++)