目录
类和对象
概括:类是 C++ 的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它是一种封装了数据和函数的组合。类中的数据称为成员变量,函数称为成员函数。类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例,拥有类的成员变量和成员函数。
一、类的定义
概述:类是用户自定义的类型,定义一个类需要使用关键字 class,然后指定类的名称,并且类的主体是包含在一对花括号中,主体包含类的成员变量和成员函数。
语法: class 类名{ 访问权限: 属性 / 行为 };
定义类型
const double PI = 3.14;
class Circle
{
public: // 访问权限 公共的权限
int m_r; // 半径
double calculateZC() // 获取到圆的周长
{
return 2 * PI * m_r;
}
};
关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。您也可以指定类的成员为 private 或 protected。
实例化对象
// 通过圆类,创建圆的对象
// c1就是一个具体的圆
Circle c1;
类的对象的公共数据成员可以使用直接成员访问运算符 . 来访问。
实例 定义一个圆类,求圆的周长
// 圆周率
const double PI = 3.14;
// 1、封装的意义
// 将属性和行为作为一个整体,用来表现生活中的事物
// 封装一个圆类,求圆的周长
// class代表设计一个类,后面跟着的是类名
class Circle
{
public: // 访问权限 公共的权限
// 属性
int m_r; // 半径
// 行为
// 获取到圆的周长
double calculateZC()
{
// 2 * pi * r
// 获取圆的周长
return 2 * PI * m_r;
}
};
int main()
{
// 通过圆类,实例化圆对象
// c1就是一个具体的圆
Circle c1;
c1.m_r = 10; // 通过点号访问成员变量 给圆对象的半径 进行赋值操作
// 2 * pi * 10 = = 62.8
cout << "圆的周长为: " << c1.calculateZC() << endl;
system("pause");
return 0;
}
结果
圆的周长为: 62.8
请按任意键继续. . .
需要注意的是,私有的成员和受保护的成员不能使用直接成员访问运算符 (.) 来直接访问。
二、C++中的结构体
结构体(struct)也是一种用户定义的数据类型,用于组合不同类型的数据成员。与C语言中的结构体相比,C++的结构体具有一些额外的特性,且C++中的结构体与C++中的类相似。
-
成员函数:
- C++的结构体可以包含成员函数,这使得结构体更加灵活。成员函数可以对结构体的数据进行操作,类似于类中的成员函数。这使得结构体在某种程度上类似于C++中的类。
-
访问权限:
- C++中的结构体,默认的访问权限是
public
,而类的默认访问权限是私有的private。这意味着结构体的成员在结构体外部可以被直接访问,不需要通过公共成员函数。
- C++中的结构体,默认的访问权限是
-
继承:
- C++中的结构体支持继承,可以从其他结构体或类继承属性和方法。这使得结构体可以更灵活地组合和扩展功能。
-
构造函数和析构函数:
- C++中的结构体可以有构造函数和析构函数,这使得在创建和销毁结构体对象时可以执行特定的操作。构造函数用于初始化对象,而析构函数用于在对象被销毁时执行清理工作。
-
默认成员初始化:
- 在C++11及更高版本中,结构体可以具有成员的默认初始化值,这使得在创建结构体对象时,不必显式为每个成员赋值。
-
友元函数:
- 结构体中的成员函数可以被声明为友元函数,从而允许其他类或结构体访问其私有成员。这增加了结构体的灵活性。
实例
#include <iostream>
struct Point
{
int x;
int y;
// 构造函数
Point(int a, int b) : x(a), y(b) {}
// 成员函数
void print()
{
std::cout << "Point(" << x << ", " << y << ")\n";
}
};
int main()
{
// 创建结构体对象并调用成员函数
Point p(3, 5);
p.print();
return 0;
}
注意: c语言中结构体没有构造函数,析构函数,成员函数能在结构体中赋初值。
上一篇:C++函数的重载、函数的默认参数、函数的占位参数详解
下一篇:C++类成员的访问权限详解