class:汪!汪!
时间: 2023-11-19 07:53:52 浏览: 33
在Python中,class是定义类的关键字。类是一种面向对象编程的概念,它是一种抽象的数据类型,用于封装数据和方法。在类中定义的函数称之为方法,类中的属性和方法可以被实例化后的对象所调用。在Python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类。继承可以让子类获得父类的属性和方法,从而减少代码的重复性。在上面的引用中,给出了一些关于类和继承的示例代码,可以帮助你更好地理解这些概念。
相关问题
本关任务:根据给出的基类Animal和main()函数。 1、根据给出的main()函数和运行结果的提示,设计出相关的各个类,注意观察运行结果,提取出每个类中需要的数据成员,并匹配上需要的成员函数。 2、显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的。改造程序,使Animal设计为抽象类,这时main()函数中p = new Animal();将出错,将此行删除。 3、每一个Animal的派生类都有一个“名字”数据成员,这一共有的成员完全可以由基类提供改造上面的程序,将这一数据成员作为抽象类Animal数据成员被各派生类使用。 下面是给出的基类Animal和main()函数: class Animal { public: virtual void cry() { cout<<"不知哪种动物,让我如何学叫?"<<endl; } }; int main( ) { Animal *p; Animal a = Animal(); a.cry(); Mouse m1("Jerry",'m'); p=&m1; p->cry(); Mouse m2("Jemmy",'f'); p=&m2; p->cry(); Cat c1("Tom"); p=&c1; p->cry(); Dog d1("Droopy"); p=&d1; p->cry(); Giraffe g1("Gill",'m'); p=&g1; p->cry(); return 0; } 下面是程序的运行结果: 不知哪种动物,让我如何学叫? 我叫Jerry,是一只公老鼠,我的叫声是:吱吱吱! 我叫Jemmy,是一只母老鼠,我的叫声是:吱吱吱! 我叫Tom,是一只猫,我的叫声是:喵喵喵! 我叫Droopy,是一条狗,我的叫声是:汪汪汪! 我叫Gill,是公长颈鹿,我的脖子太长,发不出声音来!
根据给出的main()函数和运行结果,设计出以下各个类:
```cpp
#include<iostream>
using namespace std;
class Animal {
public:
virtual void cry() = 0; //声明为纯虚函数,Animal变为抽象类
protected:
string name;
};
class Mouse : public Animal {
public:
Mouse(string n, char s) { name = n; sex = s; }
void cry() { cout << "我叫" << name << ",是一只" << (sex == 'm' ? "公" : "母") << "老鼠,我的叫声是:吱吱吱!" << endl; }
private:
char sex;
};
class Cat : public Animal {
public:
Cat(string n) { name = n; }
void cry() { cout << "我叫" << name << ",是一只猫,我的叫声是:喵喵喵!" << endl; }
};
class Dog : public Animal {
public:
Dog(string n) { name = n; }
void cry() { cout << "我叫" << name << ",是一条狗,我的叫声是:汪汪汪!" << endl; }
};
class Giraffe : public Animal {
public:
Giraffe(string n, char s) { name = n; sex = s; }
void cry() { cout << "我叫" << name << ",是一只" << (sex == 'm' ? "公" : "母") << "长颈鹿,我的脖子太长,发不出声音来!" << endl; }
private:
char sex;
};
```
改造上面的程序,使Animal设计为抽象类:
```cpp
class Animal {
public:
virtual void cry() = 0; //声明为纯虚函数,Animal变为抽象类
protected:
string name;
};
```
将每个派生类中的“名字”数据成员改为Animal的数据成员:
```cpp
protected:
string name;
```
在main()函数中,将p = new Animal();删除即可。
完整代码如下:
```cpp
#include<iostream>
using namespace std;
class Animal {
public:
virtual void cry() = 0; //声明为纯虚函数,Animal变为抽象类
protected:
string name;
};
class Mouse : public Animal {
public:
Mouse(string n, char s) { name = n; sex = s; }
void cry() { cout << "我叫" << name << ",是一只" << (sex == 'm' ? "公" : "母") << "老鼠,我的叫声是:吱吱吱!" << endl; }
private:
char sex;
};
class Cat : public Animal {
public:
Cat(string n) { name = n; }
void cry() { cout << "我叫" << name << ",是一只猫,我的叫声是:喵喵喵!" << endl; }
};
class Dog : public Animal {
public:
Dog(string n) { name = n; }
void cry() { cout << "我叫" << name << ",是一条狗,我的叫声是:汪汪汪!" << endl; }
};
class Giraffe : public Animal {
public:
Giraffe(string n, char s) { name = n; sex = s; }
void cry() { cout << "我叫" << name << ",是一只" << (sex == 'm' ? "公" : "母") << "长颈鹿,我的脖子太长,发不出声音来!" << endl; }
private:
char sex;
};
int main( ) {
Animal *p;
Mouse m1("Jerry",'m');
p=&m1;
p->cry();
Mouse m2("Jemmy",'f');
p=&m2;
p->cry();
Cat c1("Tom");
p=&c1;
p->cry();
Dog d1("Droopy");
p=&d1;
p->cry();
Giraffe g1("Gill",'m');
p=&g1;
p->cry();
return 0;
}
```
以下代码的错误在哪里:#include<iostream> using namespace std; class Mammal{ public: virtual void speak() { cout<<"什么动物怎么叫?"<<endl; } }; class Dog:public Mammal{ public: void speak() { Mammal::speak();//调用基类函数 cout<<"小狗:汪~~汪~汪 "<<endl; } }; void newspeak(Mammal*a) { a->speak(); } int main() { Dog dog; dog.speak(); Mammal*a=dog; newspeak(*a); return 0; }
以下是代码中的错误:
1. 在代码中,将`dog`对象赋值给了一个`Mammal`类型的指针`a`,语法错误,应该将`&dog`取地址赋值给`a`。
2. 在`newspeak`函数中,形参应该是一个`Mammal`类型的指针或引用,而不是指针的指针。
修改后的代码如下:
```cpp
#include<iostream>
using namespace std;
class Mammal{
public:
virtual void speak(){
cout << "什么动物怎么叫?" << endl;
}
};
class Dog:public Mammal{
public:
void speak(){
Mammal::speak();//调用基类函数
cout << "小狗:汪~~汪~汪 " << endl;
}
};
void newspeak(Mammal* a) {
a->speak();
}
int main() {
Dog dog;
dog.speak();
Mammal* a = &dog;
newspeak(a);
return 0;
}
```
输出结果为:
```
什么动物怎么叫?
小狗:汪~~汪~汪
什么动物怎么叫?
小狗:汪~~汪~汪
```
可以看到,修改后的代码运行正常,符合预期。