day7: homework
This commit is contained in:
parent
c127a3a81b
commit
15ae1803d7
|
@ -0,0 +1,43 @@
|
|||
// 请完成以下程序的代码,实现数组的循环迭代
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
template <typename T>
|
||||
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<int> it(p, 5); // 创建迭代器对象
|
||||
|
||||
int cnt = 0; // 计数器,用于控制循环次数
|
||||
while (cnt++ < 5)
|
||||
{
|
||||
cout << it.getCurrent() << endl; // 输出当前元素
|
||||
it.next(); // 迭代器前进
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -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 <iostream>
|
||||
|
||||
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<Cat *>(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<Dog *>(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<Animal *>(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<Animal *>(dp2); // 将其转换为 Animal 类型的指针
|
||||
cout << "dynamic_cast 将 Dog 转换为 Animal 成功" << endl;
|
||||
}
|
||||
catch (int e)
|
||||
{
|
||||
cout << "dynamic_cast 将 Dog 转换为 Animal 失败" << endl
|
||||
<< e << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue