4.7 引入NULL对象

【1】引入NULL对象范例

Book.h

复制代码
 1 #ifndef _BOOK_H
 2 #define _BOOK_H
 3 
 4 #include <string>
 5 using namespace std;
 6 
 7 class INULLOperator
 8 {
 9 public:
10     virtual bool isNull() = 0;
11 };
12 
13 class Book : public INULLOperator
14 {
15 public:
16     Book();
17     Book(int id, string name, double dprice);
18 
19     bool isNull();
20     string getName();
21     double getPrice();
22     static Book* createNullBook();
23 
24 private:
25     int m_nID;
26     string m_strName;
27     double m_dPrice;
28 };
29 
30 class NullBook : public Book
31 {
32 public:
33     bool isNull();
34 };
复制代码

Book.cpp

复制代码
 1 #include "Book.h"
 2 
 3 Book::Book() 
 4 {}
 5 
 6 Book::Book(int id, string name, double dprice)
 7     : m_nID(id)
 8     , m_strName(name)
 9     , m_dPrice(dprice)
10 {}
11 
12 bool Book::isNull() 
13 { 
14     return false; 
15 }
16 
17 string Book::getName() 
18 { 
19     return m_strName; 
20 }
21 
22 double Book::getPrice() 
23 { 
24     return m_dPrice; 
25 }
26 
27 Book* Book::createNullBook()
28 {
29     return (new NullBook());
30 }
31 
32 bool NullBook::isNull()
33 {
34     return true;
35 }
复制代码

main.cpp

复制代码
 1 #include "Book.h"
 2 #include <iostream>
 3 using namespace std;
 4 
 5 class BookService
 6 {
 7 public:
 8     Book* getBook(int nId)
 9     {
10         if (nId < 0)
11         {
12             return Book::createNullBook();
13         }
14         return (new Book(nId, "Design Pattern", 100));
15     }
16 };
17 
18 void main()
19 {
20     BookService *pBService = new BookService();
21     Book *pBook = pBService->getBook(-1);
22     if (pBook->isNull())
23     {
24         cout << "not found. " << endl;
25     }
26     else
27     {
28         cout << "name :: " << pBook->getName() << endl;
29         cout << "price :: " << pBook->getPrice() << endl;
30     }
31 }
复制代码

【2】总结

当你需要再三检查某个对象是否为NULL。将NULL值替换为NULL对象。

 

Good Good Study, Day Day Up.
顺序 选择 循环 总结

posted @   kaizenly  阅读(511)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
打赏

喜欢请打赏

扫描二维码打赏

微信打赏

点击右上角即可分享
微信分享提示