关于类的成员方法

在C++中,一个类会有很多的成员方法,可以分为三类:(1)public:公有的,可供用户调用(2)private:私有的,供成员方法自己调用(3)protected:在类的继承中体现;而所有的成员方法除此之外有着不同的属性,比如有些用于更改属性,有些用于读取某个属性的量,来看看他们的不同以及C++标准对它们的应对之策。

一、this指针

在C++类中调用成员函数是不需要传入当前对象这个参数的,这是因为类的成员方法一经编译就会生成一个this指针,用以指向调用该方法的对象的地址,比如下面一段代码:

class String
{
    
    
public:
	~String()
	{
    
    
		delete[]mpstr;
		mpstr = nullptr;
	}
private:
	char *mpstr;
};

他的析构函数在编译后就会变成这样的形式:

	~String(String *this)
	{
    
    
		delete[]this->mpstr;
		this->mpstr = nullptr;
	}

这也就是为何在调用成员方法时不需要传入对象,而且不出错的原因。

二、常成员方法

在我们编写代码时,一般的方法都是直接写不加任何关键字的,这种成员方法也称为普通成员方法,普通成员方法有以下特性:
1.属于类的作用域;
2.调用时必须依赖一个对象;
3.可以任意的访问对象自己的私有成员。

而对常对象,即加了const修饰的对象,它在访问成员方法时,生成的this指针就变成了const *this,由于指针类型的不同,导致它无法访问普通成员方法,所以我们需要对应的给常对象增加一个常成员方法,他的定义形式如下:

返回值 函数(参数列表)const

而且在编写类的成员函数时,我们一般把只读成员方法都实现成常成员方法,这样可以避免对其更改。但注意,常成员方法可以被普通对象和常对象调用,并不是只有常对象可调用。

三、静态成员方法

在类中我们可以设置静态成员变量,一般用于整个类所共享的量,例如统计类对应生成的对象的个数,它属于整个类共享,而不是对某个对象的私有,它有以下几个特点:
1.静态成员变量只初始化一次,且所有对象共用一个静态成员变量;
2.静态成员变量在类体内声明,在外部定义;
3.静态成员变量不属于对象,而是属于类级别的;

为了使逻辑通顺所以一般对于静态成员变量进行操作的方法都实现成静态成员方法,静态成员方法不生成this指针,所以在调用时不需要借助对象,他的调用方法为:

类名::静态成员方法名

而且因为没有this指针,所以和静态成员方法不能访问普通的成员变量,只能访问其它的静态成员变量。

四、类成员的初始化列表

一般我们把成员变量的初始化方法都写在构造函数中,而对于一个类包含另一个类时,这种方法会出错误,所以提供了类的初始化列表这种初始化操作的方法,它的格式如下:

	CGoods(const char *_name, int _amount, double _price,int y,int m,int d)
		:_date(y,m,d)//构造函数的初始化列表
		,amount(_amount)
		,price( _price)//使用参数直接对成员变量进行初始化
	{
    
    
		//当前类型构造函数体
		strcpy(name, _name);
		_count++;
	}

这种方法可以直接对要构造的对象进行初始化,免去了一些中间部分,所以效率也比较高,可以在实践中多用用。

猜你喜欢

转载自blog.csdn.net/qq_45132647/article/details/106005037