C++深入讲解类与对象之OOP面向对象编程与封装攻略
什么是OOP面向对象编程?
OOP,全名是Object-Oriented Programming,中文翻译是面向对象编程,它是一种编程方法论和编程思想,其核心思想是将一组数据结构和处理它们的方法组成对象,以及描述对象间的相互关系,实现数据封装,代码重用和灵活性等特性。
OOP面向对象编程实现了三个基本特性:封装、继承和多态。通过这些特性,OOP提供了一种更加清晰、灵活和易于维护的编程方式。
在C++中,我们可以使用类和对象实现面向对象编程。
什么是类与对象?
在C++中,类被用来描述相似的对象,而对象表示类的实例。类可以被看作是一种模板,用于创建对象。从一个类可以创建一个或多个对象。
类由以下部分组成:
- 成员变量:用于表示对象的各种属性。
- 成员函数:用于完成对对象的各种操作。
对象是类的一个实例。当定义一个类时,只是定义了一个模板,而对象是根据这个模板创建的,包含实际的数据。
封装
封装是OOP的一个重要特性,它将数据和行为组合在一起,形成一个有机的整体。封装隐藏了对象内部的复杂性,使得在外部只能访问对象的公共成员函数,而不能访问其私有成员变量和函数。
在C++中,我们使用关键字private
和public
来封装类的成员变量和成员函数。其中private
表示私有成员,只能在类内访问,而public
表示公共成员,可以在类内和类外访问。
下面是一个封装示例:
#include <iostream>
using namespace std;
class Students {
private:
string name;
int age;
public:
void setName(string s) {
name = s;
}
void setAge(int a) {
age = a;
}
string getName() {
return name;
}
int getAge() {
return age;
}
};
int main() {
Students john;
john.setName("John");
john.setAge(20);
cout << "Name: " << john.getName() << endl;
cout << "Age: " << john.getAge() << endl;
return 0;
}
在上面的示例中,我们定义了一个Students类,并将其成员变量name
和age
标记为私有变量,这样外部无法直接访问这两个变量。然后,我们定义了四个成员函数setName
、setAge
、getName
和getAge
,分别用来设置和获取name
和age
的值,并将其标记为公共成员,这样外部可以通过这四个函数访问类的私有成员变量。最后,在main
函数中,我们实例化了一个对象john
,并使用setName
和setAge
函数分别设置其名字和年龄,并使用getName
和getAge
函数来获取其名字和年龄并输出。
继承
继承是OOP的另一个重要特性,它允许我们在一个已存在的类的基础上构建一个新的类。新的类被称为派生类,已存在的类被称为基类。派生类继承了基类的所有成员,包括成员变量和成员函数,并可以添加新的成员。
在C++中,我们使用关键字class
和:
来定义派生类,:
后面的公共、保护和私有用来指定成员的访问级别,公共成员在派生类和外部都可以访问,保护成员在派生类中可以访问,但在派生类外部无法访问,私有成员在派生类和外部都无法访问。
下面是一个继承示例:
#include <iostream>
using namespace std;
class Person {
protected:
string name;
int age;
public:
void setName(string s) {
name = s;
}
void setAge(int a) {
age = a;
}
string getName() {
return name;
}
int getAge() {
return age;
}
};
class Student : public Person {
private:
int score;
public:
void setScore(int s) {
score = s;
}
int getScore() {
return score;
}
};
int main() {
Student john;
john.setName("John");
john.setAge(20);
john.setScore(90);
cout << "Name: " << john.getName() << endl;
cout << "Age: " << john.getAge() << endl;
cout << "Score: " << john.getScore() << endl;
return 0;
}
在上面的示例中,我们定义了一个基类Person
,派生类Student
继承了基类Person
的所有成员,包括成员变量name
和age
以及成员函数setName
、setAge
、getName
和getAge
,并添加了一个成员变量score
以及成员函数setScore
和getScore
。在main
函数中,我们实例化了一个对象john
,并使用setName
、setAge
和setScore
函数分别设置其名字、年龄和分数,并使用getName
、getAge
和getScore
函数来获取其名字、年龄和分数并输出。
总结
本文介绍了C++中面向对象编程的基本概念,包括类、对象、封装和继承。通过示例代码,演示了如何使用C++实现面向对象编程中的封装和继承,希望读者能够了解并掌握面向对象编程的基本思想和C++中的面向对象编程的基本语法。
示例1:https://github.com/Sherlen/weblearn/tree/main/Cplusplus/oop_encapsulation
示例2:https://github.com/Sherlen/weblearn/tree/main/Cplusplus/oop_inheritance
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++深入讲解类与对象之OOP面向对象编程与封装 - Python技术站