From 5a7632ed9cd26bc654533c3cc0de3e6896eb0b65 Mon Sep 17 00:00:00 2001 From: Zhihua Lai Date: Wed, 14 Jan 2026 10:48:55 +0000 Subject: [PATCH] Add OOP with exception --- README.md | 1 + oop-with-exception/Makefile | 31 +++++++++++++++++ oop-with-exception/main.cpp | 47 ++++++++++++++++++++++++++ oop-with-exception/oop-with-exception | Bin 0 -> 53872 bytes oop-with-exception/tests.sh | 5 +++ 5 files changed, 84 insertions(+) create mode 100644 oop-with-exception/Makefile create mode 100644 oop-with-exception/main.cpp create mode 100755 oop-with-exception/oop-with-exception create mode 100755 oop-with-exception/tests.sh diff --git a/README.md b/README.md index 2cdcc8a..cb411da 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ Examples include (and will expand to): * [rot47](./rot47/) * OOP * [virtual-interface](./virtual-interface/) + * [oop-with-exception](./oop-with-exception/) --- diff --git a/oop-with-exception/Makefile b/oop-with-exception/Makefile new file mode 100644 index 0000000..ab8b3c0 --- /dev/null +++ b/oop-with-exception/Makefile @@ -0,0 +1,31 @@ +# pull in shared compiler settings +include ../common.mk + +# per-example flags +# CXXFLAGS += -pthread + +## get it from the folder name +TARGET := $(notdir $(CURDIR)) +## all *.cpp files in this folder +SRCS := $(wildcard *.cpp) +OBJS := $(SRCS:.cpp=.o) + +all: $(TARGET) + +$(TARGET): $(OBJS) + $(CXX) $(CXXFLAGS) -o $@ $^ + +%.o: %.cpp + $(CXX) $(CXXFLAGS) -c $< -o $@ + +run: $(TARGET) + ./$(TARGET) $(ARGS) + +clean: + rm -f $(OBJS) $(TARGET) + +# Delegates to top-level Makefile +check-format: + $(MAKE) -f ../Makefile check-format DIR=$(CURDIR) + +.PHONY: all clean run check-format diff --git a/oop-with-exception/main.cpp b/oop-with-exception/main.cpp new file mode 100644 index 0000000..a5250f6 --- /dev/null +++ b/oop-with-exception/main.cpp @@ -0,0 +1,47 @@ +/** +This example creates two classes A and B, where class B is a member of class A. +And in the constructor of class A, it prints a message and throws an exception. +So what would be the output? + +B's constructor called. +A's constructor called. +B's destructor called. +Caught exception: Exception in A's constructor + +If an exception leaves a constructor, the object’s destructor does not run, because the object never finished +construction. But destructors for already-constructed members/base-subobjects do run. +*/ + +#include +#include + +class B +{ + public: + B() { std::cout << "B's constructor called." << std::endl; } + ~B() { std::cout << "B's destructor called." << std::endl; } +}; + +class A +{ + private: + B b; // Member of class B + public: + A() + { + std::cout << "A's constructor called." << std::endl; + throw std::runtime_error("Exception in A's constructor"); + } + ~A() { std::cout << "A's destructor called." << std::endl; } +}; + +int +main() +{ + try { + A a; // Attempt to create an instance of A + } catch (const std::exception& e) { + std::cout << "Caught exception: " << e.what() << std::endl; + } + return 0; +} diff --git a/oop-with-exception/oop-with-exception b/oop-with-exception/oop-with-exception new file mode 100755 index 0000000000000000000000000000000000000000..1e8655487f543b8e314c8e17a32af450a734c0d4 GIT binary patch literal 53872 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