C++面向对象之类和对象那些你不知道的细节原理详解
什么是类
类是C++中定义自己的数据类型的方法。类可看作是一种用户自定义的数据结构。
我们可以通过定义变量来定义一个类的对象,这个对象就包含了类的属性和操作。
类的基本组成
成员变量
成员变量是类的属性,也称为数据成员、字段或属性。
相当于结构体中的成员变量,可以是任何C++数据类型,包括另一个类的对象。
成员函数
成员函数是类的操作,也称为函数、方法或操作。
成员函数只能通过类的对象(即类的实例化对象)来访问。
构造函数
构造函数是一种特殊的成员函数,用于初始化类的对象。
在创建对象时,构造函数会自动执行,用于初始化对象的成员变量。
析构函数
析构函数是一种特殊的成员函数,用于清理对象。
在对象超出作用域或被显式删除时,析构函数会自动执行。
什么是对象
对象是类的一个实例化。它代表了类的一个具体的实体。
对象占用内存,拥有类的属性和操作。
例如:
class Person {
public:
string name;
int age;
void sayHello() {
cout << "Hello, my name is " << name << ", I am " << age << " years old." << endl;
}
};
int main() {
// 创建Person类的对象
Person person1;
person1.name = "Tom";
person1.age = 18;
person1.sayHello();
return 0;
}
上述代码中,我们定义了一个Person类,包含了name和age两个成员变量,以及sayHello()成员函数,用于输出Person的信息。在main()函数中,我们通过创建一个Person类的对象person1,并将其成员变量name和age赋值,最终通过调用对象的sayHello()函数来输出信息。
对象的初始化
创建对象时,编译器自动调用构造函数来初始化对象的成员变量。
如果用户没有定义构造函数,编译器将会调用默认的构造函数。默认构造函数什么也不做,仅仅是为了填补构造函数的空缺。
当用户定义了构造函数时,编译器将不会再生成默认构造函数。
例如:
class Person {
public:
string name;
int age;
Person() { // 构造函数
name = "Unknown";
age = 0;
cout << "Constructor called." << endl;
}
void sayHello() {
cout << "Hello, my name is " << name << ", I am " << age << " years old." << endl;
}
};
int main() {
Person person1;
person1.sayHello();
return 0;
}
上述代码中,我们增加了一个构造函数,并在其中初始化了name和age成员变量。当我们创建Person对象时,构造函数会被自动调用,并执行初始化操作。
对象的销毁
当对象超出作用域或被显式删除时,编译器自动调用析构函数来清理对象。
例如:
class Person {
public:
string name;
int age;
Person() { // 构造函数
name = "Unknown";
age = 0;
cout << "Constructor called." << endl;
}
~Person() { // 析构函数
cout << "Destructor called." << endl;
}
void sayHello() {
cout << "Hello, my name is " << name << ", I am " << age << " years old." << endl;
}
};
int main() {
{
// 创建Person对象
Person person1;
person1.sayHello();
} // person1超出作用域,析构函数自动调用
cout << "End of main()." << endl;
return 0;
}
上述代码中,我们增加了一个析构函数,并在其中输出了“Destructor called.”信息。当我们创建Person对象时,析构函数会被自动调用,并输出信息。在person1超出作用域时,析构函数会再次被自动调用。
示例1:类的继承
C++支持类的继承,使得我们可以从一个已有的类派生出新类,新类可继承原有类的属性和操作。
例如:
class Student : public Person { // Student类从Person类中继承
public:
int grade;
void study() {
cout << "I am studying." << endl;
}
};
int main() {
Student student1;
student1.name = "Tom";
student1.age = 18;
student1.grade = 201;
student1.sayHello();
student1.study();
return 0;
}
上述代码中,我们定义了一个Student类,并从Person类中继承了name和age成员变量以及sayHello()成员函数。我们增加了一个新成员变量grade和一个新成员函数study()。在main()中,我们创建了一个Student类的对象student1,并对其成员变量进行了赋值,最终通过调用对象的sayHello()和study()函数来输出信息。
示例2:类的多态
C++支持类的多态,使得我们可以用父类指针指向子类对象,实现动态绑定。
例如:
int main() {
Person *person;
Student student1;
person = &student1;
person->name = "Tom";
person->age = 18;
person->sayHello();
return 0;
}
上述代码中,我们创建了一个Person指针person,并将其指向Student类的对象student1。我们对person指针进行成员变量和函数的访问,并输出信息。由于student1属于Student类,但person指针的类型为Person,因此运行时会自动调用Student类中的成员函数。
总结
本篇文章详细介绍了C++面向对象程序设计中类和对象的相关细节原理,包括成员变量、成员函数、构造函数、析构函数、对象的初始化和销毁、类的继承和类的多态。
通过该篇文章的学习,相信您已经掌握了面向对象编程中类和对象的基本概念、定义方法和常见的使用技巧。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++面向对象之类和对象那些你不知道的细节原理详解 - Python技术站