C++ 类与对象_类和对象的定义与访问 (定义类和对象,访问对象成员,this指针)

本文介绍了C++中的类和对象的定义,包括数据成员和成员函数,以及访问控制(private、protected、public)。详细阐述了如何通过"."和"->"访问对象成员,并解释了this指针的概念及其在成员函数中的作用。通过实例展示了类的使用和this指针的应用。

系列文章目录

重新复习c++,所以把书中的重点内容整理成博客,尽量简洁,易懂。

C++ 类与对象_构造函数和析构函数 (带参数的构造函数,重载构造函数,复制构造函数)

C++ 类与对象_类的其他成员(常成员,静态成员,友元)

C++ 类与对象_类的包含(参数初始式)



前言

类定义解决了对数据和操作的封装及对对象的初始化问题,面向对象的方法还支持继承,多态机制,为大型软件的复杂性和可复用性提供了有效的途径。


一、定义类和对象

一个人拥有很多属性,例如身高体重;同样的他也会有很多技能,例如唱歌打篮球,这成为方法。属性使用数据的存储结构实现,称为数据成员;方法用函数实现,称为成员函数,他们都是类的成员。

类成员用关键字指定访问特性,决定其在类中或类外的可见性。
private为私有成员,只能在类中可见,出现在第一行,默认为private。
protect为保护成员,在类和派生类中可见。
public为公有成员,为类的接口,类内类外都可见。

下面是一段简单的日期类定义。

class Date {
public:
	void SetDate(int y, int m, int d);
	int Isleapyear();
	void PrintDate();
private:
	int year, month, day;
};

成员函数一般会在类外进行定义,定义格式如下。当然,简单函数也可以在类内进行定义,编译器将其设置为内联函数。

void Date::PrintDate()
{
	cout << year << "," << month << "," << day;
}

除此之外,我们还可以将类成员设置为各种格式,甚至在一个类中定义一个类类型成员。

class Student {
public:
	Date birthday;//类类型成员
	char name[10];
};
student stu;
stu.birthday.PrintDate;//调用

当然,我们也可以用数组组织对象

Student students[100];

students是一个有一百个元素的类类型数组,每一个students[i]都是一个类类型对象,打印其中一个同学的生日信息:

cout<<students[i].birthday.PrintDate();

二、访问对象成员

公有成员在类体系外可见,欲奴安抚“.”,“->”用于访问对象成员。
以下实例分别展示了,访问对象成员以及用指针访问对象成员。

#include<iostream>
using namespace std;

class Tclass {
public:
	int x, y;
	void print()
	{
		cout << x << "," << y << endl;
	};
};

int add(Tclass a)
{
	return a.x + a.y;
}

int main()
{
	Tclass cla,*cl = &cla;
	cl->x = 100;
	cl->y = 200;
	cl->print();
	cout<<add(*&cla)<<endl;
	cla.x = 300;
	cla.y = 400;
	cla.print();
	cout<<add(cla)<<endl;	
}

运行结果为:在这里插入图片描述

三、this指针

C++为成员函数提供了一个称为this的隐含指针参数,我们称成员函数拥有this函数指针。指针一旦初始化(成员函数被调用),便获得了对象的地址,至真至不能再修改和赋值,以保证其不指向其他对象。
本质上函数指针等价于;

class_Type *const this;

class_Type是用户定义的类类型标识符。
以下例子加深理解:

#include<iostream>
using namespace std;

class Tclass {
public:
	int y;
	void trying(int val)
	{
		this->val = val;//形参赋值给属性val
	};
	void print()
	{
		cout << val << endl;
	}
private:
	int val;
};

int main()
{
	Tclass cal;
	cal.trying(10);
	cal.print();
}

输出结果为10

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值