1、类的概述
(1)What(什么是类)
本质是一个数据结构 = 变量 + 函数
(2)Why(类的作用)
类是面向对象变成的核心概念,它提供了一种组织和管理代码的方式,便于实现对世界的抽象和建模
(3)类的初始化
类是通过构造函数形成对象进行初始化的
(4)类的组成
A.成员变量
类的静态成员变量
静态成员和类相关联,不和对象相关联
类的一般成员变量
一般成员属于对象,和对象相关联
类的可变成员变量
永远不可能是 const,即使它是 const 类对象的成员变量,因此一个 const 成员函数可以改变可变数据成员
B.成员函数
const成员函数
这种类型的成员函数不能改变类对象的数据,只能访问类对象
成员函数的重载
同一作用域内,定义了两个或以上函数名相同,但函数的参数列表不同的函数
多态与重载的区别
- 定义:重载-多个相同的函数名,但参数列表和返回值类型存在着不同;多态-基类 对需要重写的函数进行 virtual 修饰,派生类重写 virtual 函数
- 绑定时机:重载是一种静态绑定-根据传入的参数类型和数量在编译时进行抉择;多 态是一种动态绑定-根据对象的类型在运行时进行抉择
注意:在类内部定义的成员函数自动是inline模式,也可以显式地指定成员函数为inline
2、类成员的访问权限
- public:公有成员在类内部、类的对象和类的派生类中都是可访问的
- protected:保护成员在类内部和派生类中都是可访问的,但类的对象不可访问
- private:私有成员只在类内部可访问,对于类的对象和派生类不可访问
权限关键字 | 类内部能否访问 | 派生类能否访问 | 外部能否访问 |
---|---|---|---|
public | 可以访问 | 可以访问 | 可以访问 |
protected | 可以访问 | 可以访问 | 不可以访问 |
private | 可以访问 | 不可以访问 | 不可以访问 |
3、友元
(1)What(什么是友元)
在C++中,被关键字friend修饰的类成员方法(或类对象),被称为友元函数(或友元类)
(2)Which(有哪些友元)
- 友元函数
class A{
private:
int iCount;
public:
friend int getCount(const A &a);
}
int getCount(const A &a)
{
return a.iCount; //友元函数可以直接访问对应类的私有成员(变量和方法)
}
- 友元类
class BB; //仅作声明,避免AA类中在传参的时候报错
class AA {
private:
int iCount;
public:
AA(int iCount_) :iCount(iCount_) {
}
friend int getCount(const AA& a) {
return a.iCount;
}
int getBBTimes(BB& BObj);
};
class BB {
private:
int iTimes;
public:
friend class AA;
BB(int iTimes_) :iTimes(iTimes_) {
}
};
int AA::getBBTimes(BB& BObj)
{
return BObj.iTimes;
}
void main()
{
AA aObj(100);
int iVal = getCount(aObj);
std::cout << iVal << std::endl;
BB bObj(1);
int iTimes = aObj.getBBTimes(bObj);
std::cout << iTimes << std::endl;
}
(3)Why(友元的作用)
- 访问私有成员:友元的主要作用是允许其他类或函数访问当前类的私有成员
- 增强类的交互:友元关系可以增强不同类之间的交互能力
- 降低代码依赖性提高封装性:通过将某个类或函数声明为友元,可以减少对外界暴露的接口
4、聚合类
(1)What(什么是聚合类)
本质是一个自定义类型的数据结构(结构体或类),但聚合类有以下特性:
- 所有的成员都是public
- 没有任何构造函数
- 没有基类
- 类内部没有初始值
(2)Why(聚合类的作用)
主要目的是提供一种简单且高效的方式来组织和管理数据。它们通常用于表示简单的 数据结构,如结构体或记录类型,而不涉及复杂的行为和操作
(3)How(如何定义和使用聚合类)
struct Point{
double dx;
double dy;
};
Point pt01 = {
1.1, 2.2};
Point pt02{
3.3, 4.4};
5、嵌套类
(1)What(什么是嵌套类)
定义或声明在类内部的类,它可以访问外部类的私有成员,并能在外部类作用域内使用
(2)Why (嵌套类的作用)
封装和隐藏:将嵌套类进行私有化,实现封装和隐藏<