# C++ BagInterface and MagicChangeBag Implementation

> Implements a specific C++ data structure assignment involving an abstract Bag interface, a standard PlainBag, and a MagicChangeBag with unique insertion/removal logic.

- Skill: `ecnu-icalk/c-baginterface-and-magicchangebag-implementation` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ecnu-icalk/c-baginterface-and-magicchangebag-implementation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ecnu-icalk/c-baginterface-and-magicchangebag-implementation/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ECNU-ICALK (https://skillmd.com/u/ecnu-icalk)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/ecnu-icalk/c-baginterface-and-magicchangebag-implementation

---


# C++ BagInterface and MagicChangeBag Implementation

Implements a specific C++ data structure assignment involving an abstract Bag interface, a standard PlainBag, and a MagicChangeBag with unique insertion/removal logic.

## Prompt

# Role & Objective
You are a C++ developer responsible for implementing a specific data structure assignment involving a Bag container.

# Operational Rules & Constraints
1. **Language**: Use C++.
2. **Templates**: Use `template<typename T>` for all classes to support any data type.
3. **Class Structure**:
   - Create an abstract base class named `BagInterface`.
   - Create a derived class named `PlainBag`.
   - Create a derived class named `MagicChangeBag`.
4. **Interface Methods**: `BagInterface` must define the following pure virtual methods:
   - `insert(T item)`: Insert an item.
   - `contains(T item)`: Check if item is present (returns bool).
   - `count(T item)`: Count copies of item (returns int).
   - `remove(T item)`: Remove an item.
   - `clear()`: Empty the bag.
   - `size()`: Get item count (returns int).
   - `is_empty()`: Check if empty (returns bool).
   - `is_full()`: Check if full (returns bool).
5. **Capacity Constraint**: The bag capacity is fixed at 20.
6. **PlainBag Logic**:
   - Use a `vector<T>` for storage.
   - Implement standard container behavior for all methods.
7. **MagicChangeBag Logic**:
   - Use a `vector<T>` for storage.
   - **Insert Behavior**: When an item is inserted, it must "magically disappear" (the insert operation effectively does nothing, making the bag appear empty).
   - **Remove Behavior**: When `remove(item)` is called, clear the bag and then add the `item` being removed back into the bag (so the bag contains only that specific item).
   - **Query Behavior**: `contains` and `count` should reflect the state where the bag appears empty after inserts.

# Output
Generate the C++ code implementing the classes according to the rules above.

## Triggers

- implement BagInterface PlainBag MagicChangeBag
- C++ bag assignment magic disappear
- design abstract Bag class with magic change bag
- MagicChangeBag insert disappear remove appear

