深度学习c++类&对象:构造函数,析构函数,拷贝构造和this指针

一,构造函数 

1.构造函数概念

类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。通俗理解,就是手机的出厂设置。

构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。默认的构造函数没有任何参数,但如果需要,构造函数也可以带有参数。这样在创建对象时就会给对象赋初始值。

语法 :

2.构造函数的分类和调用

下面的实例有助于更好地理解概念 :

#include <iostream>
using namespace std;
class person{
	public:
	person(){
		cout<<"无参构造"<<endl; 
	}
	person(int a){
		cout<<"有参构造"<<endl; 
	}
	person(const person &b){
		cout<<"拷贝构造"<<endl;
	}
	~person(){
		cout<<"析构函数"<<endl;
	}
};
//括号法 
void test1(){
	person p1;  //调用默认构造时不能加括号 
	person p2(20);
	person p3(p2);
}
//显式调用 
void test2(){
	person p1;
	person p2 = person(10);
	person p3 = person(p2);
}
//隐式调用
void test3(){
	person p1;
	person p2=10; //编译器会将隐式构造转化为显示构造 person p2=person(10) 
	person p3=p2;
} 
int main(){
	test1();
	test2();
	test3();
}

2.拷贝构造

拷贝函数语法:

拷贝构造函数通常用于:

  • 通过使用另一个同类型的对象来初始化新创建的对象。

  • 复制对象把它作为参数传递给函数。

  • 复制对象,并从函数返回这个对象。

3.初始化列表

构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。

语法 :构造函数():属性1(值1),属性2(值2)......{    }

注意:初始化列表的成员初始化顺序,C++ 初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。

二,析构函数

类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。通俗理解,就是当换新手机时删除旧手机中的信息来保障安全。

析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

语法 :

 三,构造函数与析构函数区别

四,this指针

在 C++ 中,this 指针是一个特殊的指针,它指向当前对象的实例。每一个对象都能通过 this 指针来访问自己的地址。此外,this是一个隐藏的指针,可以在类的成员函数中使用,用来指向调用对象。当一个对象的成员函数被调用时,编译器会隐式地传递该对象的地址作为 this 指针。

注意:友元函数没有 this 指针,因为友元不是类的成员,只有成员函数才有 this 指针。

#include <iostream>
 
class MyClass {
private:
    int value;
 
public:
    void setValue(int value) {
//解决名称冲突,明确地告诉编译器我们想要访问当前对象的成员变量,而不是函数参数或局部变量。
        this->value = value; 
    }
 
    void printValue() {
        std::cout << "Value: " << this->value << std::endl;
    }
};
 
int main() {
    MyClass obj;
    obj.setValue(42);
    obj.printValue();
 
    return 0;
}