C++基础:构造函数与析构函数

数据成员多为私有的,要对他们进行初始化,必须用一个公有函数来进行。同时这个函数应该在定义对象时自动执行一次。称为构造函数。

构造函数的用途:1)创建对象;2)初始化对象中的属性;3)类型转换

c语言:有空间即可操作

C++:有空间不一定能够操作,必须调动构造函数,来创建对象:有空间不一定有对象,有对象一定有空间;

类型名+(a,b):调动构造函数, 如 :int c1(1,2)

类型名+{a,b}:调动构造函数, 如:int c2{1,2}

类型名+{}:调动无实参的构造函数, 如:int c3{}

构造函数的定义与使用:

      构造函数是特殊的公有成员函数(在特殊用途中构造函数的访问限定可以定义成私有或者保护)。其特征如下:

1.函数名与类型名相同。

2.构造函数无函数返回类型说明。注意是没有而不是void,即什么也不写,也不可以写成void。实际上构造函数有返回值,返回的就是构造函数所创建的对象;

3.在程序运行时,当新的对象被建立,该对象所属的类构造函数自动被调用,在该对象生存期间也只调用这一次。

4.构造函数可以重载。严格地讲,类中可以定义多个构造函数,他们由不同的参数表区分,系统在自动调用时按照一般函数重载的规则原则一个执行。

5.构造函数可以在类中定义,也可以在类中声明,在类外定义;

6.如果类说明中没有给出构造函数,则C++编译器自动给出一个缺省的构造函数。

类名(void){ }

但是只要我们定义了一个构造函数,系统就不会自动生成缺省的构造函数。只要构造函数是无参的或者只要各参数均有缺省值的,C++编译器都认为是缺省的构造函数,并且缺省的构造函数只能有一个。

#include
using namespace std;
class Complex
{
	int Real;//实部
	int Image;//虚部
public:
	Complex() //缺省函数的构造
	{
		Real = 0.0;
		Image = 0.0;
		cout << "creat object:Complex()" << endl;
	}
	Complex(int r, int i) //带参数的构造函数
	{
		Real = r;
		Image = i;
		cout<< "creat object:Complex(int ,int)" << endl;
	}
	void print()
	{
		cout << "Real= " << Real << 't' << "Image= " << Image << endl;
	}
};
int main()
{
	Complex ca;
	Complex cb(1, 2);
	Complex cc = Complex(3, 4);
	Complex cd{ 5,6 };
	Complex ce();//是否可以构造对象
	return 0;
}

运行结果如下: 

C++基础:构造函数与析构函数_第1张图片

 成员初始化表:

#include
using namespace std;
class Complex
{
	int Real;//实部
	int Image;//虚部
public:
	Complex() :Real{}, Image{} //缺省函数的构造
	{
	
		cout << "creat object:Complex()" << endl;
	}
	Complex(int r, int i) :Real{ r }, Image{i} //带参数的构造函数
	{
		cout<< "creat object:Complex(int ,int)" << endl;
	}
	void print() const //常方法
	{
		cout << "Real= " << Real << '\t' << "Image= " << Image << endl;
	}
};
int main()
{
	Complex ca;
	Complex cb(1, 2);
	Complex cc = Complex(3, 4);
	Complex cd{ 5,6 };
	Complex ce();//是否可以构造对象
	return 0;
}

C++基础:构造函数与析构函数_第2张图片

 练习:

1. 根据main中的提示,实现构造函数

 #include
using namespace std;
class CDate
{
private:
   int year;
   int month;
   int day;
public:
CDate() :year{1}, month{1}, day{1}
CDate(int a,int b,int c) :year{a}, month{b}, day{c}
{
}
void Print()
{
cout << "year" << year << endl;
cout << "month" << month << endl;
cout << "day" << day << endl;
}
};

int main()
{
CDate c1;
CDate car(2022, 5, 22);
c1.Print();
car.Print();
return 0;
}

运行结果:

C++基础:构造函数与析构函数_第3张图片

 2. 根据main中的提示,实现构造函数

#include
using namespace std;
const int len = 20;
class CGoods
{
private:
    char Name[len];
    int Amount;
    float Price;
    float Totle;
public:
    CGoods() :Name{'\0'}, Amount{}, Price{}, Totle{}
    {

    }
    CGoods(const char *a, int b, float c) :Name{ '\0'}, Amount{b}, Price{c}, Totle{b * c}
    {
        strcpy_s(Name, len, a);
    }
    void Print()
    {
        cout << "Name" << Name << endl;
        cout << "Amount" << Amount << endl;
        cout << "Price" << Price << endl;
        cout << "Totle" << Totle << endl;

    }
};

运行结果:

C++基础:构造函数与析构函数_第4张图片

析构函数的定义:

        当定义一个对象时,C++自动调用构造函数建立该对象并进行初始化,那么当一个对象的生命周期结束时,C++也会自动调用一个函数注销该对象并进行善后工作,这个特殊的成员函数即析构函数:

1. 函数名与类型名相同,但是需要在前面加‘~’,如:~CGoods()。

2. 析构函数无函数返回类型,与构造函数在这一方面是一样的,但析构函数不带任何参数。

3.一个类有一个也只有一个析构函数,这与构造函数不同。

4.对象注销时,系统自动调用析构函数。

4. 如果类说明中没有给出析构函数,则C++编译器会自动给出一个缺省的析构函数。

如:~类型名(){    }

#include
using namespace std;
class Complex
{
	int Real;//实部
	int Image;//虚部
public:
	Complex() :Real{}, Image{} //缺省函数的构造
	{
	
		cout << "creat object: " <

你可能感兴趣的:(笔记,c++,开发语言)