C++中的类与对象深度解析
在C++中,类(class)是一种用户自定义的数据类型,它由数据成员和成员函数组成。类中的数据成员可以是各种类型,包括内置类型、自定义类型以及指针等,成员函数则是负责操作这些数据成员的函数。类可以看做是一种数据的集合和对这些数据的一些操作的封装。
类的定义
定义类的基本语法如下:
class 类名 {
访问修饰符:
数据成员声明
访问修饰符:
成员函数声明
};
其中,访问修饰符
用于控制类的成员的访问权限,包括public
、private
、protected
三种。
public
:表示该成员可以被类的外部使用;private
:表示该成员只能被该类内部的成员函数以及友元函数使用;protected
:表示该成员可以被该类内部的成员函数、子类以及友元函数使用。
示例:
class Student {
public:
int id;
char name[20];
void show() {
cout << "id:" << id << endl;
cout << "name:" << name << endl;
}
};
上述代码定义了一个学生类,其中包含了成员变量 id
和 name
以及成员函数 show()
。因为 show()
函数在类的内部定义,所以可以直接访问类的内部成员变量。
类的实例化
类的实例化即创建该类的对象,也称为类的实例。通过实例化一个类,我们可以在程序中使用该类的数据成员和成员函数。
语法:
类名 对象名;
示例:
Student stu;
stu.id = 123;
strcpy(stu.name, "Tom");
stu.show();
该示例中,通过 Student
类实例化对象 stu
,并给成员变量 id
赋值为123,name
赋值为 "Tom",最后调用 show()
函数输出结果。
构造函数和析构函数
构造函数(Constructor)是一种特殊的成员函数,它在对象创建时自动执行,用于初始化对象的成员变量的值。析构函数(Destructor)也是一种特殊的成员函数,它在对象销毁时自动执行,用于清理对象所占用的资源。
语法:
class 类名 {
public:
类名(); // 构造函数
~类名(); // 析构函数
};
例如:
class Student {
public:
Student(); // 构造函数
~Student(); // 析构函数
int id;
char name[20];
void show() {
cout << "id:" << id << endl;
cout << "name:" << name << endl;
}
};
Student::Student() {
cout << "构造函数执行" << endl;
}
Student::~Student() {
cout << "析构函数执行" << endl;
}
上述代码定义了构造函数和析构函数,并在两个特殊的成员函数中加了输出语句,以便在创建和销毁对象时显示相应的信息。
int main() {
Student stu;
stu.id = 123;
strcpy(stu.name, "Tom");
stu.show();
return 0;
}
该示例中,创建 Student
类的实例对象时,构造函数会自动执行一次,并输出相应的提示信息。程序结束时,析构函数会自动执行一次,并同样输出相应的提示信息。
成员函数
成员函数是定义在类内部的函数,它和类的数据成员一样,是类的成员之一。成员函数是类的重要组成部分,它负责实现对类的操作,使得代码更加清晰易懂。
语法:
class 类名 {
public:
返回类型 成员函数名(参数列表);
};
示例:
class Student {
public:
int id;
char name[20];
void show() {
cout << "id:" << id << endl;
cout << "name:" << name << endl;
}
void set(int i, char *n) {
id = i;
strcpy(name, n);
}
};
int main() {
Student stu;
stu.set(123, "Tom");
stu.show();
return 0;
}
上述代码中,我们为 Student
类添加了另外一个成员函数 set()
,用于设置该学生的 id
和 name
。在 main()
函数中,我们通过调用 stu
的 set()
函数来设置学生的信息。
友元函数和友元类
友元函数(Friend Functions)是和类有协作关系的函数,它可以访问该类的私有成员变量,但不是该类的成员函数。在很多情况下,我们需要将一些函数作为该类的友元函数,使得这些函数可以访问到该类的私有数据。
语法:
class 类名 {
friend 返回类型 友元函数名(参数列表);
};
示例:
class Student {
public:
Student() {
age = 18;
}
int id;
char name[20];
friend void show_age(Student &stu) {
cout << stu.age << endl;
}
private:
int age;
};
int main() {
Student stu;
show_age(stu);
return 0;
}
上述代码中,我们为 Student
类添加了一个私有成员变量 age
和一个全局友元函数 show_age()
。在 main()
函数中,通过调用 show_age()
函数输出 stu
的 age
值。
友元类(Friend Classes)是可以访问到该类的私有成员变量的类。在很多情况下,我们需要将某些类作为该类的友元类,使得这些类可以访问到该类的私有数据,从而增加程序的安全性。
语法:
friend class 友元类名;
示例:
class Student {
public:
Student() {
age = 18;
}
int id;
char name[20];
friend class Teacher;
private:
int age;
};
class Teacher {
public:
void show_age(Student &stu) {
cout << stu.age << endl;
}
};
int main() {
Student stu;
Teacher tea;
tea.show_age(stu);
return 0;
}
上述代码中,我们为 Student
类添加了一个私有成员变量 age
和一个友元类 Teacher
。在 Teacher
类中,我们实现了一个成员函数 show_age()
,该函数可以访问到 Student
类的私有数据 age
。在 main()
函数中,通过调用 show_age()
函数输出 stu
的 age
值。
总结
本文介绍了C++中的类与对象的基本概念,以及类的定义、实例化、构造函数、析构函数、成员函数、友元函数和友元类的使用方法。在C++编程中,类和对象是十分重要的概念,掌握好这些概念可以使得程序设计更加简洁、清晰,并提高程序的安全性和可维护性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的类与对象深度解析 - Python技术站