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.
顺序 选择 循环 总结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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的设计差异