C++ 面向对象高级开发 (七)----- static 关键字

static 关键字 的用法 以及特性

 

 

拿之前写过的 复数类 举例:

首先 我们来看没有 static 的 data 对象以及 function 对象

non-static data members:

 

在使用complex对象的时候,要调用其中的real函数:

 

 

实际上会利用 this point 去在函数real中调用 要使用的数据的地址&C1

 

 而non-static 数据 在储存中是每一个成员数据分开储存的 调用的时候就需要用到 this调用

 

 

 对应的non-static 成员函数 则也需要使用this调用 每一个需要使用的数据的地址

 

 

 

static data members:

 

它就是 在complex类 中 不需要 每个成员都创建储存的那一类 数据,例如银行固定不变的利率

static 只有一份

 

 

 对应的 static 成员函数 就是为了处理 static数据 所以 static 成员函数没有 this point

 

 

static 用法实例:

Singleton (单例类)设计模式:

第一种:

在private 里面创建 构造函数(ctors) 意味着 ’整个世界‘ 只存在 一个A类一个a对象 

并且你只能通过 调用public 中的static 成员函数 getInstance()  来得到 a 这个对象 并使用 这个A类的其他成员函数

 

 第二种:(更加推荐,更好)

第一种 singleton 设计模式实现 的缺点是 如果没有任何人要使用这个A类的话 因为 ' static A a ' A类仍然创建了A对象,并进行储存。占用了内存。但并未得到使用,会产生不必要的浪费。

所以有第二种 singleton 的设计模式实现

 

仍然把构造函数(ctors)放在 private 里 但是,静态对象 a 的创建 却被放在了 public static 成员函数中,这种做法使得,如果没有人使用到这个 单例类 那么,这个类的对象就不会被创建,当且仅当该类被使用时(调用 getInstance() 函数时),该类才会于此同时 创建静态对象 a 。

避免了内存浪费 。

 

cout 在库函数中怎么写的:

 

 

类模板:

 

 

函数模板:

使用时不用指定 类型,编译器会自动 参数推导

 

posted @ 2022-11-02 21:22  slowlydance2me  阅读(14)  评论(0编辑  收藏  举报