C++成员函数

const成员函数

在成员函数中,this默认情况下是一个指向类类型的常量指针,即ClassType * const;有时候我们并不会改变this所指的对象,这个时候应该将成员函数声明为const,此时this的类型为const ClassType * const。

class Person
{
public:
	int height_;
	int getHeight() const 
	{
		return height_;
	}
};

返回this对象的成员函数

class Person
{
private:
	int height_;
public:
	
	int getHeight() const 
	{
		return height_;
	}

	Person& setHeight(int height)
	{
		height_ = height;
		return *this;
	}
};

左值和右值引用成员函数

有时候,我们可以给一个右值进行赋值,这个时候我们希望阻止这种用法可以强制赋值运算的左侧运算对象(this)是一个左值。

	std::string s1, s2;
	s1 + s2 = "hello";

可以通过使用引用限定符&或&&指出this是一个左值还是一个右值,类似const限定符,引用限定符只能用于非静态成员函数,且必须同时出现在函数的声明和定义中。

class Person
{
	const char* name_;
	Person& operator=(const Person&) &;//只能向可修改的左值赋值
}

成员函数的重载

一个成员函数可以同时使用const和引用限定,在此情况下,引用限定符必须跟随在const限定符之后。可以根据const限定符以及引用限定符来区分重载版本,调用成员函数时编译器会选择最匹配的那个重载函数。

如果我们定义两个或两个以上的具有相同名字和相同参数列表的成员函数,就必须对所有函数都加上引用限定符或者所有都不加。

class Person
{
public:
	void func() && 
	{
		std::cout << "this为非const右值引用" << std::endl;
	};
	void func() const &&
	{
		std::cout << "this为const右值引用" << std::endl;
	};
	void func() const &
	{
		std::cout << "this可以为const的左值引用" << std::endl;
	};
	void func() &
	{
		std::cout << "this可以为非const的左值引用" << std::endl;
	};
};
 

int main(void)
{
	Person().func();
	(const Person()).func();
	Person person1;
	person1.func();
	const Person person2;
	person2.func();
	system("pause");
	return 0;
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页