C++ 类和对象示例

什么是类?

A C++ 类将数据和用于操作数据的方法合二为一。类还决定了对象的形式。类中包含的数据和方法称为类成员。类是用户定义的数据类型。要访问类成员,我们使用类的实例。您可以将类视为对象的蓝图。

类是房屋的原型。它显示了门、窗、地板等的位置和大小。根据这些描述,我们可以建造一栋房子。房子成为对象。可以从原型创建许多房屋。同样,也可以从一个类创建许多对象。

C++ 增益级

在上图中,我们有一个房屋原型。从这个原型开始,我们创建了两栋具有不同特征的房屋。

类别声明

在 C+ 中,使用 class 关键字来定义类。该关键字后面应跟类名。类主体随后添加在花括号 { } 之间。

句法

class class-name
   {
   // data
   // functions
   };
  • 类名是分配给类的名称。
  • 数据是类的数据,通常声明为变量。
  • 这些函数是类函数。

私有和公共关键字

你一定遇到过这两个关键字。它们是访问修饰符。

  • 私人:

当使用 private 关键字定义函数或类时,该函数或类即变为私有函数或类。此类函数或类只能在类内访问。

  • 上市:

另一方面,public 关键字使数据/函数公开。它们可以从类外部访问。

对象定义

对象是由类创建的。类对象的声明方式与变量的声明方式类似。必须以类名开头,后跟对象名。类类型的对象。

句法

class-name object-name;
  • 类名是要创建对象的类的名称。
  • 对象名称是要分配给新对象的名称。

从类创建对象的过程称为实例化。

访问数据成员

要访问类的公共成员,我们使用 (.) 点运算符。这些成员标有公共访问修饰符。

例子1

#include <iostream>
using namespace std;
class Phone {
public:
	double cost;   
	int slots; 
};
int main() {
	Phone Y6;        
	Phone Y7;        

	Y6.cost = 100.0;
	Y6.slots = 2;

	Y7.cost = 200.0;
	Y7.slots = 2;
	cout << "Cost of Huawei Y6 : " << Y6.cost << endl;
	cout << "Cost of Huawei Y7 : " << Y7.cost << endl;

	cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl;
	cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl;

	return 0;
}

输出:

访问数据成员

以下是代码截图:

访问数据成员

代码说明:

  1. 在我们的代码中包含 iostream 头文件以便使用其功能。
  2. 在我们的代码中包含 std 命名空间以便使用它的类而不调用它。
  3. 声明一个名为 Phone 的类。
  4. 使用公共访问修饰符将我们即将创建的变量标记为可公开访问。
  5. 声明双精度数据类型的变量成本。
  6. 声明一个名为 slots 的整型变量。
  7. 课堂主体结束。
  8. 调用main()函数。程序逻辑应添加到其主体内。
  9. 创建一个名为 Y6 且类型为 Phone 的对象。这称为实例化。
  10. 创建一个名为 Y7 且类型为 Phone 的对象。这称为实例化。
  11. 使用对象 Y6 访问 Phone 类的变量/成员成本。该值设置为 100.0。Y6 的成本现在设置为 100.0。
  12. 使用对象 Y6 访问 Phone 类的变量/成员槽。值设置为 2。Y6 的槽现在设置为 2。
  13. 使用对象 Y7 访问 Phone 类的变量/成员成本。该值设置为 200.0。Y7 的成本现在设置为 200.0。
  14. 使用对象 Y7 访问 Phone 类的变量/成员槽。值设置为 2。Y7 的槽现在设置为 2。
  15. 将 Y6 的成本与其他文本一起打印在控制台上。
  16. 将 Y7 的成本与其他文本一起打印在控制台上。
  17. 与其他文本一起打印 Y6 的插槽数量。
  18. 与其他文本一起打印 Y7 的插槽数量。
  19. 程序成功完成后必须返回一个值。
  20. main() 函数体结束。

什么是私人课程?

标记为私有的类成员只能由类内定义的函数访问。类外定义的任何对象或函数都不能直接访问此类成员。私有类成员只能由成员和友元函数访问。

什么是受保护类别?

标记为 protected 的类成员比标记为 private 的类成员有优势。它们可以由其定义类中的函数访问。此外,它们还可以从派生类访问。

例子2

#include <iostream>
using namespace std;
class ClassA {
public:
	void set_a(int val);
	int get_a(void);

private:
	int a;
};
int ClassA::get_a(void) {
	return a;
}
void ClassA::set_a(int val) {
	a = val;
}
int main() {
	ClassA a;
	a.set_a(20); 
	cout << "Value of a is: " << a.get_a(); 
	return 0;
}

输出:

访问数据成员

以下是代码截图:

访问数据成员

代码说明:

  1. 在我们的代码中包含 iostream 头文件以使用其功能。
  2. 在我们的代码中包含 std 命名空间,以便使用它的类而不调用它。
  3. 创建一个名为 ClassA 的类。
  4. 使用公共访问修饰符将要创建的类成员标记为可公开访问。
  5. 创建名为 set_a() 的函数,该函数接受一个整数值 val。
  6. 创建一个名为get_a()的函数。
  7. 使用私有访问修饰符将要创建的类成员标记为私有可访问。
  8. 声明一个名为a的整型变量。
  9. 课堂主体结束。
  10. 使用类名和范围解析运算符来访问函数 get_a()。我们想要定义该函数在调用时执行的操作。
  11. 函数 get_a() 在调用时应该返回变量 a 的值。
  12. 函数 get_a() 定义结束。
  13. 使用类名和范围解析运算符来访问函数 set_a()。我们想要定义该函数在调用时执行的操作。
  14. 将变量val的值赋给变量a。
  15. 函数 set_a() 定义结束。
  16. 调用 main() 函数。程序逻辑应添加在此函数主体内。
  17. 创建 ClassA 的一个实例并赋予其名称 a。
  18. 使用上述类实例和函数 set_a() 将值 20 分配给变量 a。
  19. 在控制台上打印一些文本以及变量 a 的值。变量 a 的值是通过调用 get_a() 函数获取的。
  20. 程序成功完成后必须返回值。
  21. 函数 main() 主体结束。

例子3

#include <iostream>
using namespace std;
class ParentClass {
protected:
	int value;
};
class ChildClass : public ParentClass {
public:
	void setId(int x) {
		value = x;
	}
	void displayValue() {
	cout << "Value is: " << value << endl;
	}
};
int main() {
	ChildClass c;
	c.setId(21);
	c.displayValue();
	return 0;
}

输出:

访问数据成员

以下是代码截图:

访问数据成员

代码说明:

  1. 在我们的代码中包含 iostream 头文件以使用其功能。
  2. 在我们的代码中包含 std 命名空间,以便使用它的类而不调用它。
  3. 创建一个名为 ParentClass 的类。
  4. 使用受保护的访问修饰符将要创建的类成员标记为受保护的。
  5. 创建一个名为value的整型变量。
  6. 课堂主体结束。
  7. 创建一个名为 ChildClass 的新类,继承 ParentClass。
  8. 使用受保护的访问修饰符将要创建的类成员标记为子类可访问。
  9. 创建名为 setId() 的函数,该函数接受一个整数值 x。
  10. 将变量 x 的值分配给变量值。
  11. 函数 setId() 定义结束。
  12. 创建一个名为displayValue()的函数。
  13. 将名为 value 的变量的值与其他文本一起打印在控制台上。
  14. 函数 displayValue() 主体结束。
  15. ChildClass 类的主体结束。
  16. 调用 main() 函数。程序逻辑应添加在此函数主体内。
  17. 创建 ChildClass 的一个实例并将其命名为 c。
  18. 使用上述类实例和函数 setId() 将值 21 分配给变量 x。
  19. 使用上述类实例调用名为displayValue()的函数。
  20. 程序成功完成后必须返回值。
  21. 函数 main() 主体结束。

类成员函数

函数帮助我们操作数据。类成员函数可以用两种方式定义:

  • 在类定义中
  • 类定义之外

如果要在类定义之外定义函数,则必须使用范围解析运算符 (::)。这应该伴随类和函数名称。

例子2

#include <iostream>
#include <string>
using namespace std;
class Guru99
{
public:
	string tutorial_name;
	int id;
	void printname();
	void printid()
	{
		cout << "Tutorial id is: "<< id;
	}
};
void Guru99::printname()
{
	cout << "Tutorial name is: " << tutorial_name;
}
int main() {
	Guru99 guru99;
	guru99.tutorial_name = "C++";
	guru99.id = 1001;
	guru99.printname();
	cout << endl;
	guru99.printid();
	return 0;
}

输出:

类成员函数

以下是代码截图:

类成员函数

代码说明:

  1. 在我们的程序中包含iostream头文件以使用其功能。
  2. 在我们的程序中包含字符串头文件以使用其功能。
  3. 在我们的代码中包含 std 命名空间,以便使用它的类而不调用它。
  4. 创建一个名为 Guru99 的类。
  5. 使用公共访问修饰符将我们即将创建的类成员标记为可公开访问。
  6. 创建一个名为tutorial_name的字符串变量。
  7. 创建一个名为id的整型变量。
  8. 创建一个名为 printname() 的函数。此函数未在类定义中定义。
  9. 创建一个名为printed()的函数。此函数在类定义中定义。其主体已添加到类定义中。
  10. 在控制台上打印变量 id 的值以及其他文本。请注意,这已添加到 printid() 函数主体中。它仅在调用 printid() 函数时执行。
  11. printid() 函数体结束。
  12. Guru99 类主体结束。
  13. 函数 printname() 定义的开始。
  14. 在控制台上打印变量 tutorial_name 的值以及其他文本。请注意,这已添加到 printname() 函数主体中。它仅在调用 printname() 函数时执行。
  15. printname() 函数定义结束。
  16. 调用 main() 函数。程序逻辑应添加在此函数主体内。
  17. 创建 Guru99 类的实例并将其命名为 guru99。
  18. 使用上述实例来分配值 C++ 到变量 tutorial_name。
  19. 使用guru99实例将值1001分配给变量id。
  20. 使用实例 guru99 调用函数 printname() 。
  21. 调用end(结束行)命令在控制台上打印一个新的空白行。
  22. 使用实例guru99调用函数printid()。
  23. 程序成功完成后必须返回值。
  24. main() 函数体结束。

构造函数和析构函数

什么是构造函数?

构造函数是用于初始化对象的特殊函数。 C++ 编译器 创建对象时会调用构造函数。构造函数用于为类成员赋值。当然,这是在为它们分配了一些内存空间之后。

什么是析构函数?

另一方面,析构函数有助于销毁类对象。

构造函数名称必须与类名相似。构造函数没有返回类型。

构造函数可以在类体内部或外部定义。如果在类体外部定义,则应使用类名和作用域解析运算符 (::) 来定义。

例子3

#include <iostream>  
using namespace std;
class ClassA {
public:
	ClassA() {
		cout << "Class constructor called"<<endl;
	}
	~ClassA() {
		cout << "Class destructor called"<<endl;
	}
};

int main() {
	ClassA a;
	int p = 1;
		if (p) {
			ClassA b; 
		}   
}

输出:

构造函数和析构函数

以下是代码截图:

构造函数和析构函数

代码说明:

  1. 将 iostream 头文件包含到代码中以使用其功能。
  2. 在我们的代码中包含 std 命名空间,以便使用它的类而不调用它。
  3. 创建一个名为 ClassA 的类。
  4. 使用公共访问修饰符将我们即将创建的成员标记为可公开访问。
  5. 为该类创建一个构造函数。
  6. 调用构造函数时在控制台上打印的文本。endl 是 C++ 关键字,表示结束行。它将鼠标光标移动到下一行。
  7. 类构造函数主体的结束。
  8. 为该类创建一个析构函数。
  9. 调用析构函数时在控制台上打印的文本。endl 是 C++ 关键字,表示结束行。它将鼠标光标移动到下一行。
  10. 析构函数主体的结束。
  11. 课堂主体结束。
  12. 调用 main() 函数。程序逻辑应添加在此函数主体内。
  13. 创建一个类对象并赋予其名称a。构造函数将被调用。
  14. 创建一个名为 p 的整型变量并赋值 1。
  15. 使用变量 p 创建一个 if 语句块。
  16. 创建一个类对象并将其命名为b。析构函数将被调用。
  17. if 语句主体结束。
  18. main() 函数体结束。

总结

  • C++ 是面向对象的。
  • 课程构成了 C++ 这使得它面向对象。
  • A C++ 类将数据和操作数据的方法合二为一。
  • 类是对象的蓝图。
  • 类别决定对象的形式。
  • 类中包含的数据和方法称为类成员。
  • 要访问类成员,您应该使用该类的实例。
  • 要创建一个类,我们使用 class 关键字。
  • 类成员函数可以在类内部或外部定义。