- 类:代码区
- 静态变量:静态存储区
- 函数入口:代码区
关于类的内容都在模型上方那一块
- 对象:只是给成员变量分配空间
- 静态成员变量:静态存储区
- 非静态成员变量:栈区
函数入口:代码区
访问对象成员(属性)的本质:
- 对象调用成员函数(方法)的本质:把对象的地址作为参数进行函数调用
==============================
难点:
- 全局函数,成员函数
- 全局函数声明,全局函数定义
- 成员函数声明,全局函数定义,class_name::func_name
- 具体实现写在外面:声明在class里,定义在class外,仍然可以访问private(如果不写声明就是错误的)
- this:就是个形参
- 传&:传值的本质是赋值,不可传本地变量的引用
- 返回&:返回值的本质:赋值
- string& getName() {return name;} 也可传string
- string getName() const {return name(this->name);} 不可传string&
- const:
- 修饰变量,类
- 修饰函数体:本质是修饰this指针
private:背后有张作用域的图
友元:在友元中就相当于在类里面
类,对象,成员变量,成员函数,public/private/protected
构造函数,析构函数:初始化,结束
BigThree:
- 默认构造函数(无参构造)
- 默认拷贝构造(拷贝构造)
- 默认析构函数(无参析构)
- 默认赋值(=)
- this指针:就是个函数参数(形参),调用成员函数就是在传参,传的是&object(实参)
每个成员函数:void fun(void) 的本质形式是 void fun(className *this)
对象调用成员函数的本质:把对象作为参数传入,object.fun() 的本质形式是 fun(&object)
传参的过程:className* this = &object
(1)当成员函数的参数名和成员变量一致时,可以使用this进行区分
(2)return *this 从而返回调用成员函数的对象
- 成员变量私有,提供对外接口
- 构造函数的初始化,析构函数
- 成员函数写声明
- 具体实现写在外面:声明在class里,定义在class外,仍然可以访问private(如果不写声明就是错误的)
- inline
- const:参数,常值函数(const修饰this,让this指向的内容不可被改变)
- &:参数,返回值
- this作为隐含参数
- 友元
- 别的类做友元:表示在class2中可以访问class1的私有变量
- 别的成员函数做友元:表示在class2的那个函数中可以访问class1的私有变量
- 全局函数做友元:表示在全局函数中可以访问class的私有变量
- 函数重载,运算符重载:将运算符重载视为函数重载
- 通过成员函数进行重载:p.opeator<<(cout) —-> p << cout
- 有的运算不能使用成员函数进行重载
- 通过全局函数进行重载:<<(cout, p) —-> cout << p
- 由于成员变量是私有的,因此需要将该全局函数变成友元
- 简化调用:
- 通过成员函数进行重载:p.opeator<<(cout) —-> p << cout
- 仿函数
```cpp
class MyPrint{
public:
void operator () (string str){
} };cout << str << endl;
void myPrint(string str){ cout << str << endl; }
int main() { //仿函数调用 MyPrint mp; mp.operator()(“hello”); mp(“hello”);
//匿名对象
MyPrint()("hello");
//函数调用
myPrint("hello");
return 0;
} ```
继承
多态
