diff --git a/day7/homework/h6.cpp b/day7/homework/h6.cpp new file mode 100644 index 0000000..4b59156 --- /dev/null +++ b/day7/homework/h6.cpp @@ -0,0 +1,43 @@ +// 请完成以下程序的代码,实现数组的循环迭代 +#include + +using namespace std; + +template +class Iterator +{ +public: + T *data; + int size; + int currentIndex; + +public: + Iterator(T *d, int s) : data(d), size(s), currentIndex(0) {} + T getCurrent() // 获取当前元素 + { + return data[currentIndex]; + } + void next() // 迭代器前进的代码 + { + currentIndex = (currentIndex + 1) % size; // 对 size 取余用于循环 + } + void previous() // 迭代器后退的代码 + { + currentIndex = (currentIndex - 1 + size) % size; // + size 用于防止负数,对 size 取余用于循环 + } +}; + +int main() +{ + int *p = new int[5]{1, 2, 3, 4, 5}; // 创建数组 + Iterator it(p, 5); // 创建迭代器对象 + + int cnt = 0; // 计数器,用于控制循环次数 + while (cnt++ < 5) + { + cout << it.getCurrent() << endl; // 输出当前元素 + it.next(); // 迭代器前进 + } + + return 0; +} diff --git a/day7/homework/h7.cpp b/day7/homework/h7.cpp new file mode 100644 index 0000000..eb0c8db --- /dev/null +++ b/day7/homework/h7.cpp @@ -0,0 +1,125 @@ +/******************************************************************** +假设有一个基类 Animal 和两个派生类 Cat 和 Dog,它们的定义如下 : class Animal +{ +public: + virtual ~Animal() {} +}; + +class Cat : public Animal +{ +public: + void meow() + { + std::cout << "Meow!" << std::endl; + } +}; + +class Dog : public Animal +{ +public: + void bark() + { + std::cout << "Woof!" << std::endl; + } +}; + +请完成以下任务: + +1) 在 main 函数中创建一个 Animal 类型的指针,并使用 dynamic_cast 将其转换为 Cat 类型的指针。如果转换成功,调用 meow 函数让猫发出"Meow!"声音;如果转换失败,输出转换失败的提示信息。 + +2) 在 main 函数中创建一个 Animal 类型的指针,并使用 dynamic_cast 将其转换为 Dog 类型的指针。如果转换成功,调用 bark 函数让狗发出"Woof!"声音;如果转换失败,输出转换失败的提示信息。 + +3) 在 main 函数中创建一个 Cat 类型的指针,并使用 dynamic_cast 将其转换为 Animal 类型的指针。输出转换成功的提示信息。 + +4) 在 main 函数中创建一个 Dog 类型的指针,并使用 dynamic_cast 将其转换为 Animal 类型的指针。输出转换成功的提示信息。 + +【提示】可以尝试 +try +{ +} +catch (int e) +{ +} +异常尝试捕获语法确定转换是否成功。 +********************************************************************/ + +#include + +using namespace std; + +class Animal +{ +public: + virtual ~Animal() {} +}; + +class Cat : public Animal +{ +public: + void meow() + { + cout << "Meow!" << endl; + } +}; + +class Dog : public Animal +{ +public: + void bark() + { + cout << "Woof!" << endl; + } +}; + +int main() +{ + Animal *ap = new Animal(); // 创建一个 Animal 类型的指针 + try + { + Cat *cp = dynamic_cast(ap); // 将其转换为 Cat 类型的指针 + cp->meow(); + } + catch (int e) + { + cout << "dynamic_cast 将 Animal 转换为 Cat 失败" << endl + << e << endl; + } + + Animal *ap2 = new Animal(); // 创建一个 Animal 类型的指针 + try + { + Dog *dp = dynamic_cast(ap2); // 将其转换为 Dog 类型的指针 + dp->bark(); + } + catch (int e) + { + cout << "dynamic_cast 将 Animal 转换为 Dog 失败" << endl + << e << endl; + } + + Cat *cp2 = new Cat(); // 创建一个 Cat 类型的指针 + try + { + Animal *ap3 = dynamic_cast(cp2); // 将其转换为 Animal 类型的指针 + cout << "dynamic_cast 将 Cat 转换为 Animal 成功" << endl; + } + catch (int e) + { + cout << "dynamic_cast 将 Cat 转换为 Animal 失败" << endl + << e << endl; + } + + Dog *dp2 = new Dog(); // 创建一个 Dog 类型的指针 + try + { + Animal *ap4 = dynamic_cast(dp2); // 将其转换为 Animal 类型的指针 + cout << "dynamic_cast 将 Dog 转换为 Animal 成功" << endl; + } + catch (int e) + { + cout << "dynamic_cast 将 Dog 转换为 Animal 失败" << endl + << e << endl; + } + + return 0; +}