下面代码执行后的输出结果为? #include <iostream> using namespace std; class Animal { public: void eat() { cout << “1” << endl; } virtual void drink() { cout << “2” << endl; } }; class Dog: public Animal { public: void eat() { cout << “3” << endl; } void drink() { cout << “4” << endl; } }; int main() { Animal ani; Dog dog; Animal *p = &ani; p->eat(); p->drink(); p = &dog; p->eat(); p->drink(); Animal *ptr = (Animal*)&dog; ptr->eat(); ptr->drink(); return 0; }
区块链毕设网qklbishe.com为您提供问题的解答
using namespace std;
class Animal {
public:
void eat() {
cout << “1” << endl;
}
virtual void drink() {
cout << “2” << endl;
}
};
class Dog: public Animal {
public:
void eat() {
cout << “3” << endl;
}
void drink() {
cout << “4” << endl;
}
};
int main() {
Animal ani;
Dog dog;
Animal *p = &ani;
p->eat();
p->drink();
p = &dog;
p->eat();
p->drink();
Animal *ptr = (Animal*)&dog;
ptr->eat();
ptr->drink();
return 0;
}
-
首先,创建了一个Animal类型的对象ani和一个Dog类型的对象dog。
-
然后,创建了一个指向Animal类型的指针p,并将它初始化为指向ani的地址。
-
执行p->eat()时,由于p指向的是Animal类型的对象ani,并且eat()函数在Animal类中没有被声明为虚函数,所以直接调用Animal类中的eat()函数,输出1。
-
执行p->drink()时,同样p指向的是Animal类型的对象ani,但drink()函数在Animal类中被声明为虚函数。由于p是Animal*类型,根据多态的规则,调用的是Animal类中的drink()函数,输出2。
-
接着,将指针p重新指向Dog类型的对象dog的地址。
-
再次执行p->eat()时,由于p现在指向的是Dog类型的对象dog,并且Dog类重写了eat()函数,根据多态的规则,调用的是Dog类中的eat()函数,输出3。
-
执行p->drink()时,p指向的是Dog类型的对象dog,并且drink()函数是虚函数,所以调用的是Dog类中的drink()函数,输出4。
-
然后,创建一个新的指向Animal类型的指针ptr,并使用类型转换将dog的地址强制转换为Animal*类型,然后赋值给ptr。
-
执行ptr->eat()时,尽管ptr实际上指向的是Dog类型的对象,但由于ptr是Animal*类型,并且eat()函数不是虚函数,所以调用的是Animal类中的eat()函数(因为指针类型决定了调用哪个函数),但由于ptr实际上指向的是dog对象,而Dog类重写了eat()函数,所以实际上调用的是Dog类的eat()函数,输出3。
-
执行ptr->drink()时,ptr实际上指向的是Dog类型的对象,并且drink()函数是虚函数,但由于ptr是Animal*类型,所以仍然会根据虚函数表找到正确的函数实现进行调用。因为ptr实际上指向Dog对象,所以调用的是Dog类中的drink()函数,输出4。
综上,输出结果就是1 2 3 4 3 4。
以上就是关于问题下面代码执行后的输出结果为? #include <iostream>
using namespace std;
class Animal {
public:
void eat() {
cout << “1” << endl;
}
virtual void drink() {
cout << “2” << endl;
}
};
class Dog: public Animal {
public:
void eat() {
cout << “3” << endl;
}
void drink() {
cout << “4” << endl;
}
};
int main() {
Animal ani;
Dog dog;
Animal *p = &ani;
p->eat();
p->drink();
p = &dog;
p->eat();
p->drink();
Animal *ptr = (Animal*)&dog;
ptr->eat();
ptr->drink();
return 0;
}的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训
从业7年-专注一级市场
微信:btc9767
TELEGRAM :https://t.me/btcok9
具体资料介绍
web3的一级市场千万收益的逻辑
进群点我
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 下面代码执行后的输出结果为? #include <iostream>
using namespace std;
class Animal {
public:
void eat() {
cout << “1” << endl;
}
virtual void drink() {
cout << “2” << endl;
}
};
class Dog: public Animal {
public:
void eat() {
cout << “3” << endl;
}
void drink() {
cout << “4” << endl;
}
};
int main() {
Animal ani;
Dog dog;
Animal *p = &ani;
p->eat();
p->drink();
p = &dog;
p->eat();
p->drink();
Animal *ptr = (Animal*)&dog;
ptr->eat();
ptr->drink();
return 0;
}
微信:btc9767
TELEGRAM :https://t.me/btcok9
具体资料介绍
web3的一级市场千万收益的逻辑
进群点我
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 下面代码执行后的输出结果为? #include <iostream>
using namespace std;
class Animal {
public:
void eat() {
cout << “1” << endl;
}
virtual void drink() {
cout << “2” << endl;
}
};
class Dog: public Animal {
public:
void eat() {
cout << “3” << endl;
}
void drink() {
cout << “4” << endl;
}
};
int main() {
Animal ani;
Dog dog;
Animal *p = &ani;
p->eat();
p->drink();
p = &dog;
p->eat();
p->drink();
Animal *ptr = (Animal*)&dog;
ptr->eat();
ptr->drink();
return 0;
}
进群点我
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 下面代码执行后的输出结果为? #include <iostream>
using namespace std;
class Animal {
public:
void eat() {
cout << “1” << endl;
}
virtual void drink() {
cout << “2” << endl;
}
};
class Dog: public Animal {
public:
void eat() {
cout << “3” << endl;
}
void drink() {
cout << “4” << endl;
}
};
int main() {
Animal ani;
Dog dog;
Animal *p = &ani;
p->eat();
p->drink();
p = &dog;
p->eat();
p->drink();
Animal *ptr = (Animal*)&dog;
ptr->eat();
ptr->drink();
return 0;
}
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 下面代码执行后的输出结果为? #include <iostream> using namespace std; class Animal { public: void eat() { cout << “1” << endl; } virtual void drink() { cout << “2” << endl; } }; class Dog: public Animal { public: void eat() { cout << “3” << endl; } void drink() { cout << “4” << endl; } }; int main() { Animal ani; Dog dog; Animal *p = &ani; p->eat(); p->drink(); p = &dog; p->eat(); p->drink(); Animal *ptr = (Animal*)&dog; ptr->eat(); ptr->drink(); return 0; }