0 无关内容
类和对象是面向对象编程(OOP)中最核心的两个概念。类是创建对象的模板,而对象则是类的实例。这一千字将详细解析类和对象的定义、特点及如何使用它们来编写程序。
类在编程中扮演着标准或蓝图的角色。它封装了数据和操作数据的方法。在类中,可以定义变量(通常称为属性或字段)和方法(函数)。例如,一个简单的Student
类可能包含姓名、学号等属性,以及一些方法如更改姓名、查询学号等。
对象是类的实例化结果。当代码创建一个类的新实例时,系统会为该实例分配内存空间,并按照类的定义初始化状态和行为。以Student
类为例,一旦根据这个类创建一个对象,就可以具体地设置其姓名和学号,以及调用其方法执行特定操作。
使用类和对象,程序员可以更贴近实际业务逻辑地构建程序。每一个对象都可以独立操作,拥有自己的属性集合,而相同类的对象之间可以通过方法的调用进行交互,实现复杂的功能。
让我们通过一段简单的代码来展示类和对象的使用:
// 定义学生类
class Student {
public:
// 构造函数,用于创建对象时初始化
Student(string name, int id) {
this->name = name;
this->id = id;
}
// 方法,用于设置学生姓名
void setName(string name) {
this->name = name;
}
// 方法,用于获取学生ID
int getId() {
return id;
}
private:
string name; // 学生姓名
int id; // 学生学号
};
int main() {
// 创建一个Student对象
Student student("John", 123);
// 调用对象的方法
student.setName("Jane");
cout << "Student ID: " << student.getId() << endl;
return 0;
}
在上述代码中,我们首先定义了一个Student
类,该类有两个私有属性:name
和id
,以及两个公共方法:setName
和getId
。然后在main
函数中,我们创建了一个Student
类的对象student
,并通过该对象调用了setName
和getId
方法。
类和对象的使用使得代码更加模块化,易于理解和维护。对象提供了一种非常有效的方式来模拟真实世界中的实体和交互,使得程序设计更加直观。同时,类的设计还允许代码重用,同类的对象可以共享相同的方法和属性,减少了代码冗余。
总的来说,类和对象是实现面向对象编程范式的基础,它们的使用不仅提高了软件开发的效率,也极大地增强了程序的可扩展性和可维护性。掌握如何合理地定义类和使用对象,对于每个软件开发者来说都是基本且重要的技能。
1 简介
C++是一种广泛使用的编程语言,它支持过程化、面向对象以及泛型编程。在C++中,类和对象是实现面向对象编程的基本构建块。类定义了一组数据和操作,而对象则是类的实例。本文旨在详细介绍C++中类和对象的定义与使用。
1.1 C++类的定义
在C++中,类是一种用户自定义的数据类型,可以包含数据成员和操作这些数据的成员函数。类的定义通常包括以下几个部分:
- 数据成员:这些是类中的变量,用于存储与类相关的信息。
- 成员函数:这些是定义在类中的函数,用于操作类的数据成员。
- 访问修饰符:C++中的访问修饰符有
public
、protected
和private
,它们决定了类成员的访问级别。
类的定义示例如下:
class MyClass {
public: // 公共部分
int myNum; // 数据成员
void displayNum() { // 成员函数
cout << "Number: " << myNum << endl;
}
private: // 私有部分
float privateFloat; // 数据成员
};
1.2 C++对象的创建和使用
一旦定义了类,就可以通过该类创建对象。对象是类的实例,每个对象都有自己的数据成员副本。创建对象的过程包括为新对象分配内存,并调用构造函数初始化对象。
对象的创建示例如下:
MyClass obj1; // 创建MyClass类的对象obj1
obj1.myNum = 5; // 访问对象的数据成员
obj1.displayNum(); // 调用对象的成员函数
1.3 构造函数和析构函数
C++类可以包含两种特殊类型的成员函数:构造函数和析构函数。构造函数用于初始化对象,当创建类的实例时自动调用。析构函数用于清理资源,当对象即将消失时自动调用。
构造函数和析构函数的示例如下:
class MyClass {
public:
MyClass() { // 构造函数
cout << "Object is being created" << endl;
}
~MyClass() { // 析构函数
cout << "Object is being deleted" << endl;
}
};
MyClass obj; // 创建对象时调用构造函数
// ... 使用对象 ...
// 对象销毁时调用析构函数
1.4 封装、继承和多态
C++的类支持三大面向对象编程特性:封装、继承和多态。
- 封装:隐藏对象的内部状态和实现细节,只提供公
2 源代码
#include <iostream>
using namespace std;
class BookCard
{
private:
string id; //借书证学生的学号
string stuName; //借书证学生的姓名
int number; //所借书的数量
public:
//用来初始化3 个数据成员,是否带默认参数值参考结果来分析
BookCard(string id, string stuName, int number):
id(id), stuName(stuName), number(number) {}
BookCard()
{
}
void display() //显示借书证的3 个数据成员的信息
{
cout << id << " " << stuName << " " << number << endl;
}
bool borrow() //已借书数量不足10 则将数量加1,数量达到10 则直接返回false
{
if (number >= 10)
{
return false;
}
number++;
}
};
void f(BookCard& bk)
{
if (!bk.borrow())
{
bk.display();
cout << "you have borrowed 10 books,can not borrow any more!" << endl;
}
else
{
bk.display();
}
}
int main()
{
BookCard bk1("B20190620", "东平", 10), bk2;
f(bk1);
f(bk2);
return 0;
}
2
#include <iostream>
using namespace std;
class Time
{
private:
int Hour;
int Minute;
int Second;
public:
Time()
{
}
Time(int hour, int minute, int second):Hour(hour), Minute(minute), Second(second)
{
}
void setTime(int hour, int minute, int second)
{
this->Hour = hour;
this->Minute = minute;
this->Second = second;
}
void addSecond()
{
this->Second++;
if (Second >= 60)
{
Second = 0;
Minute++;
}
if (Minute >= 60)
{
Minute = 0;
Hour++;
}
if (Hour >= 24)
{
Hour = 0;
}
}
void PrintTime()
{
cout << Hour << ":" << Minute << ":" << Second << endl;
}
void copyConstructor(Time time)
{
}
~Time()
{
}
};
void f(Time t)
{
t.PrintTime();
}
int main()
{
Time t(8, 0, 59);
t.PrintTime();
t.addSecond();
t.PrintTime();
}
3
#include <iostream>
using namespace std;
class Boy
{
private:
friend class Girl;
string Name;
int Age;
public:
Boy()
{
}
Boy(string name, int age):Name(name), Age(age){}
void print()
{
cout << "Name: " << Name << " Age = " << Age << endl;
}
void VisitGirl(Girl& girl)
{
//cout << "Name: " << girl.Name << " Age = " << girl.Age << endl;
}
~Boy()
{
}
};
class Girl
{
private:
string Name;
int Age;
public:
Girl()
{
}
Girl(string name, int age) :Name(name), Age(age) {}
void print()
{
cout << "Name: " << Name << " Age = " << Age << endl;
}
void VisitBoy(Boy& boy)
{
cout << "Name: " << boy.Name << " Age = " << boy.Age << endl;
}
~Girl()
{
}
};
int main()
{
Boy boy("Nan", 18);
Girl girl;
girl.VisitBoy(boy);
return 0;
}