类和对象

1.定义

2.类大小的计算

3.this指针

4.构造函数

5.析构函数

1.类使用class关键字定义,形式为:

class+类名

{

访问限定符:成员函数,成员变量

}

       访问限定符包括:public(公有),protected(保护),private(私有)。其中public可直接在类外直接被访问,而private和protected不能在类外直接被访问。访问权限的作用域从该限定符出现的位置到下一个限定符出现为止。

        其实,struct一样可以用于定义类,但是人们还是习惯用class,原因之一是class默认的访问权限是private,struct是public。

         注意:成员函数在类中定义默认为内联,并且定义是要使用类::函数名。

class Stack
{
public:
	void Init();
	void Push(int x);
	int Top();

private:
	int* a;
	int top;
	int capacity;
};
void Stack::Init()
{
	a = nullptr;
	top = capacity = 0;
}

void Stack::Push(int x)
{
	if (top == capacity)
	{
		size_t newcapacity = capacity == 0 ? 4 : capacity * 2;
		a = (int*)realloc(a, sizeof(int) * newcapacity);
		capacity = newcapacity;
	}

	a[top++] = x;
}

int Stack::Top()
{
	return a[top - 1];
}
int main()
{
	Stack a1;
	return 0;
}

        2.在计算类的大小时,只需计算成员变量,不用计算成员函数,这是因为成员函数和成员变量分开存储,成员函数存储于公共代码区,计算方式与结构体类似。

        注意:若类只有成员函数或空类,则分配1个字节,不存储数据,只是占位,表示对象存在过。

       3.this指针是一个特殊的指针,用于指向当前对象本身。在C++中,每个类的成员函数都有一个隐式的this指针,指向调用该成员函数的对象。通常使用this指针来访问对象的成员变量和成员函数。

       类型为:类类型*const,在成员函数中不能给this指针赋值,且只能在成员函数中使用,当对象调用成员函数时,将对象的地址作为实参传递给this形参,所以对象不存储this指针,this指针存于栈帧中。

class Date
{
public:
	void Init(int year, int month, int day)//(Date*this,int year,int month,int day)这是隐含的
	{
		_year = year;//this->_year=year;
		_month = month;//this->_month=month;
		_day = day;
	}
private:
	int _year;
	int _month;
	int  _day;
};
int main()
{
	Date d1;
	d1.Init(2023, 7, 20);//(&d1,2023,7,20);
	return 0;
}

        4.构造函数是特殊的成员函数,主要用于初始化对象。其特点为函数名与类名相同,无返回值;对象实例化时自动调用;可以重载。并且不写构造函数,编译器会自动生成,但内置类型的成员不会处理,自定义类型的成员才会处理。

class Date
{
public:
	Date(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	void Printf()
	{
		cout << _year << endl;
		cout << _month << endl;
		cout << _day << endl;
	}
private:
	int _year;
	int _month;
	int  _day;
};
int main()
{
	Date d1(2023,7,20);
	d1.Printf();
	return 0;
}

        4.局部对象的销毁由编译器完成,对象的销毁时会自动调用析构函数,完成对象中资源的清洁工作。其特点为:函数名为在类前加~;无参数无返回值;一个类有且只有一个,如无定义则自动生成;不能重载。

注意:一般只有在动态开辟内存时才需要自行写入析构函数,一般的成员变量没有销毁的必要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sakura&NANA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值