c++类和对象——this指针
在C++中,类和对象以及 this 指针是非常重要的概念,下面为你详细介绍:
1.类
类是一种用户自定义的数据类型,它是对具有相同属性和行为的对象的抽象描述。类中可以包含数据成员(变量)和成员函数(函数)。例如:
class Person
{
public:
// 数据成员
std::string name;
int age;
// 成员函数
void introduce()
{
std::cout << "My name is " << name << ", and I'm " << age << " years old." << std::endl;
}
};
在这个例子中, Person 类定义了两个数据成员 name 和 age ,以及一个成员函数 introduce 。
2.对象
对象是类的一个实例,是类的具体表现。可以通过类来创建多个对象,每个对象都有自己独立的存储空间来存储数据成员的值。例如:
int main()
{
Person person1;
person1.name = "Alice";
person1.age = 25;
person1.introduce();
Person person2;
person2.name = "Bob";
person2.age = 30;
person2.introduce();
return 0;
}
这里创建了两个 Person 类的对象 person1 和 person2 ,它们各自有自己的 name 和 age 值。
3.this指针
this 指针是一个隐含在类的成员函数中的指针,它指向调用该成员函数的对象。在成员函数内部,可以使用 this 指针来访问对象的成员变量和其他成员函数。例如:
class Person
{
public:
std::string name;
int age;
void setName(const std::string& newName)
{
this->name = newName; // 使用this指针访问成员变量
}
void introduce()
{
std::cout << "My name is " << name << ", and I'm " << age << " years old." << std::endl;
}
};
当调用 person1.setName("Charlie"); 时, this 指针指向 person1 ,这样 this->name 就表示 person1 的 name 成员变量。
this 指针对于区分成员变量和函数参数(如果参数名与成员变量名相同)以及在成员函数中引用当前对象非常有用。
4.this使用
在C++中,不仅可以对基本数据类型的函数进行重载,也可以对自定义类型(比如类)进行函数重载。常见的有对成员函数重载,以及对一些操作符重载(这也属于函数重载的一种特殊形式)。下面通过一个示例代码来展示对自定义类型的函数重载,这里以一个简单的 Fraction (分数)类为例,重载其成员函数和 + 操作符:
#include <iostream>
class Fraction
{
private:
int numerator; // 分子
int denominator; // 分母
public:
// 构造函数
Fraction(int num = 0, int den = 1) : numerator(num), denominator(den) {}
// 重载成员函数,输出分数
void print() const
{
std::cout << numerator << "/" << denominator << std::endl;
}
// 重载成员函数,根据传入的参数改变分子分母
void print(int newNum, int newDen) const
{
std::cout << newNum << "/" << newDen << std::endl;
}
// 重载 + 操作符,实现分数相加
Fraction operator+(const Fraction& other) const
{
int newNum = numerator * other.denominator + other.numerator * denominator;
int newDen = denominator * other.denominator;
return Fraction(newNum, newDen);
}
};
int main()
{
Fraction f1(1, 2);
Fraction f2(1, 3);
f1.print(); // 调用第一个print函数
f1.print(3, 4); // 调用第二个print函数
Fraction sum = f1 + f2; // 调用重载的+操作符函数
sum.print();
return 0;
}
在上述代码中:
1. 定义了 Fraction 类,包含分子和分母两个私有成员变量。
2. 重载了 print 成员函数,一个无参的用于输出当前分数对象的分子分母,另一个带参数的可以输出指定的分子分母。
3. 重载了 + 操作符,使得两个 Fraction 对象可以直接使用 + 进行相加操作,返回一个新的 Fraction 对象表示相加的结果。
这样就展示了自定义类型函数重载的基本使用方法,让自定义类型也能像基本数据类型一样方便地进行各种操作。