目录
[10.2static静态成员 (变量/函数)](#10.2static静态成员 (变量/函数))
1.面向对象的编程思想
面向过程编程:瀑布开发模型、理想化的模型。面向过程程序设计就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个一次调用即可。
Object-Oriented面向对象思想:数据封装。面向对象程序设计描述的时客观世界中的事物,以对象代表一个具体的事物,把数据和数据的操作方法放在一起而形成的一个相互依存又不可分割的整体。
2.面向对象的三大特征
- 封装、继承、多态
- 三大特征具有承上启下的关系,而且适用于所有面向对象的编程语言。
- 在面向对象的程序设计过程中,数据和处理数据的函数封装在一个模块(类)中,不存在跨模块处理数据的问题!
3.封装
- C++的封装是通过类类型(简称类)实现的,通过类把具体事物抽象成一个由属性(成员变量)和行为(成员函数)组成的独立单位(即类)。
- 在类的封装设计中,通过访问权限控制类成员的访问:
- private
- protected
- public
4.类的定义
- 类是事物的抽象描述,若想定义类就需要抽象出事物的属性及方法。
注意:这段代码中,字符指针name的相关操作是存在问题的。Const char*
5.成员函数
成员函数的函数体既可以写在类中,也可以写在类外实现。!通常使用类外实现。
构造函数和析构函数
针对成员变量的Set/Get、Add/Del函数
其他功能性函数
【成员函数的简单分类】-经验之谈
【举例】
6.对象的创建和使用
对象在栈中创建:
类名 对象名 = 初始值;
类名 对象名(初始值列表);(初始值列表构造函数)
例如:Student s;(s是变量也是对象)
对象的公有成员(成员变量和成员函数)的访问:
对象名.成员变量
对象名.成员函数(实参列表)
.成员访问运算符
对象在堆中创建:
类名.指针=new 类型;
delete 指针;
例如:Student* ps = new Student;Delete ps;
对象的公有成员(成员变量和成员函数)的访问:
指针->成员变量
指针->成员函数列表
->称为成员访问运算符
7.字符串string的使用
8.this指针
类的指针常量,即Student* const this,不能赋值
隐含的this指针,不能在形参和实参中显示写
可以在成员函数内部可以使用
编译器会自动给类的所有成员函数的形参中都添加一个默认的this指针。❌静态成员函数static
cpp
#include<iostream>
using namespace std;
class Date
{
public:
void Init(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
//void Print(Date* const this)
void Print()//❌不能显示写
{
cout <<this->_year<<this->_month << "-" << this->_day << endl;
cout << this << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d1, d2;
d1.Init(2022, 1, 11);
d2.Init(2022, 1, 12);
//d1.Print(&d1)
d1.Print();//❌不能显示写
d2.Print();
return 0;
}
9.构造函数VS析构函数
- 构造函数用于对象的创建和初始化(分配内存、初始化工作)
- 析构函数用于对象的释放(回收内存、清理工作)
9.1🎇构造函数
cpp
类名::构造函数名(和类名一样)(参数列表):(成员变量)(初始化参数),(成员变量)(初始化参数)
{
//成员变量赋值
//
}
//存在成员对象
类名::构造函数名(和类名一样)(参数列表):(成员对象)(参数,参数,参数),(成员变量)(初始化参数)
{
//成员变量赋值
//
}
9.1.1无参构造函数&有参构造函数
9.1.2构造函数的初始化表
- 在实现构造函数时,可以在函数体中给成员变量赋值。
- 同时也可以通过 :运算符在构造函数后面初始化成员变量,这种方式称为列表初始化。
- 常变量、引用、成员对象必须使用初始化列表!
注:建议尽量使用初始化表。某些情况下,必须使用初始化表进行初始化 常变量、引用必须初始化,所以常成员变量、引用类型的成员变量,只能通过初始化表进行初始化!成员对象也需要通过初始化表初始化。
cpp
类名::构造函数名(和类名一样)(参数列表):(成员变量)(初始化参数),(成员变量)(初始化参数)
{
//成员变量赋值
//
}
9.1.3重载构造函数
9.1.4含有成员对象的类的构造函数
成员对象的初始化也必须在初始化表中完成!
创建含有成员对象的对象时,先执行成员对象的构造函数,再执行类的构造函数。
B类含有的成员变量是a对象(A类类型)的构造函数
成员对象:C++允许将一个对象作为另一个类的成员变量,即类中的成员变量可以时其他类的对象,这样的成员变量称为类的子对象或成员对象。
cpp
class B
{
A a; //对象a作为类B的成员变量
//其他成员
}
9.2析构函数
9.3拷贝构造函数
使用再同一个作用域内,使用一个对象初始化另外一个对象
对象作为实参传递给形参
函数调用中的拷贝构造函数(实参到形参)
函数参数为引用类型,因为实参就是形参,所以不会调用拷贝构造函数。
10.🎇关键字修饰类的成员
10.1const常成员(变量/函数)
- 常对象只能调用常成员函数
- 常成员函数不能够直接或者间接的修改任何成员变量
- 成员函数=功能性函数+构造函数+析构函数
10.2static静态成员 (变量/函数)
一个类的静态成员变量乐意被该类的所有对象所"共享"
可以通过类名直接调用静态成员变量和函数,所以可以把全局函数转换成某个的静态成员函数。
- 三角形和点类
- 复数类
- 单例模式
- 指针类型的成员变量以及正确处理❌
- 深拷贝&浅拷贝❌
- 友元函数
- 内联函数inline
- auto自动类型识别