栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++小知识点(四)------C++ primer plus中文版(第六版)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++小知识点(四)------C++ primer plus中文版(第六版)

1、this指针 1.1、什么是this指针?

this指针指向用来调用成员函数的对象,被作为隐藏参数传递给方法。
换句话说就是,一个对象调用了一个类方法,在类方法中,则默认为this->数据成员。

1.2、为什么需要this指针?

在没有引入this指针之前,类的成员函数只能设计一个类对象,但是很多类方法可能涉及两个类对象,此时this指针可以访问调用成员函数的类,而另外的类对象可以作为成员函数的参数。

	class Student
	{
	private:
		string name;
		string address;
		int age;
	public:
		Student(const string t_name, string t_addr, int t_age);		普通构造函数
		Student();													默认构造函数
		~Student();													析构函数
		void Showmessage();
		const Student & Compare(const Student & s) const;
	};
	
	Student::Student(const string t_name, string t_addr, int t_age)
	{
		name = t_name;
		address = t_addr;
		age = t_age;
	}
	
	Student::Student()
	{
		name = "temp_name";
		address = "temp_addr";
		age = 0;
	}

	Student::~Student()
	{

	}

	const Student & Student::Compare(const Student & s) const
	{
		if(s.age > age)
			return s;
		else
			return *this;								*this为调用对象的别名
	}

1、上述程序中const Student & Compare(const Student & s) const;括号中的const表示不能修改显示访问的对象,函数后面的const表示不会改变调用此函数的对象,返回值为const Student &表示返回的是对象本身,而不是副本,且不能被修改。
2、this指针指向调用对象,则*this为调用对象的别名。

试想如果没有this指针将会怎样?

1、无法同时设计多个对象;
2、只能返回传入的参数对象。而不能返回调用此成员函数的对象;
2、对象数组

声明对象数组和结构体数组差不多:

1、	结构体数组
	typedef struct
	{
		string name;
		string address;
		int age;
	}Stu;
	Stu stu[3] = {{...},{...},{...}};		直接初始化
	
2、	对象数组
	Student student[3];						使用默认构造函数完成对象数组的初始化

3、	对象数组的初始化
	如果不使用默认构造函数完成初始化,将对数组中的每个对象都要使用普通构造函数完成初始化
	Student student[3] = {
		Student("fhl","hubei",26),
		Student("wy","hubei",24),
		Student("fhy","hubei",23),
	};
3、类作用域 3.1、访问限制
	类中定义的数据成员和成员函数的作用域为整个类,即在类中已知,类外不可知,因此类外不可直接访问类的数据成员和成员函数。
1、	公有成员函数必须通过类对象调用;
2、	访问数据成员,必须通过公有成员函数;
3、	定义公有成员函数时,必须使用作用域解析运算符。
3.2、所有对象共享常量
方式一:在类中声明一个枚举
	class Student
	{
	private:
		enum {age = 26};
		string name;
		string address;
		int age;
	public:
		Student(const string t_name, string t_addr);				普通构造函数
		Student();													默认构造函数
		~Student();													析构函数
		void Showmessage();
		const Student & Compare(const Student & s) const;
	};
	
	此处的枚举只是一个符号名称,并不会真的创建这样的枚举成员,因此不需要提供枚举名,并且在后面遇到age时,都将使用26来替代

方式二:在类中使用关键字static
	class Student
	{
	private:
		static const int age = 26;
		string name;
		string address;
		int age;
	public:
		Student(const string t_name, string t_addr);				普通构造函数
		Student();													默认构造函数
		~Student();													析构函数
		void Showmessage();
		const Student & Compare(const Student & s) const;
	};

	使之成为静态成员变量,本身不属于任何对象,所有对象共享数据,一处修改,其他地方的引用均被修改
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/836622.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号