【发布时间】:2020-06-09 05:49:17
【问题描述】:
这是我的代码。我需要帮助使这个动态绑定工作。
#include<iostream>
#include<conio.h>
using namespace std;
class Shape {
protected:
double x,y;
public:
void get_data(double a,double b=3.14) {
x=a;
y=b;
}
virtual void display_area(){
};
};
class Rectangle : public Shape {
public:
void display_area() {
cout<<"\nArea of Rectangle : "<<x*y<<" units.\n";
}
};
class Circle : public Shape {
public:
void display_area() {
cout<<"\nArea of Circle : "<<y*x*x<<" units.\n";
}
};
class Triangle : public Shape {
public:
void display_area() {
cout<<"\nArea of Triangle : "<<0.5*x*y<<" units.\n";
}
};
main() {
Shape *ptr;
char opt,wait;
double a,b;
do{
system("cls");
cout<<"\n1.Area of Rectangle\n2.Area of Circle\n3.Area of Triangle\n4.Exit\n\nEnter your Option : ";
opt=getche();
switch(opt) {
case '1':
*ptr = new Rectangle;
cout<<"\nEnter Length : ";
cin>>a;
cout<<"\nEnter Width : ";
cin>>b;
ptr->get_data(a,b);
ptr->display_area();
break;
case '2':
*ptr = new Circle;
cout<<"\nEnter Radius : ";
cin>>a;
ptr->get_data(a);
ptr->display_area();
break;
case '3':
*ptr = new Triangle;
cout<<"\nEnter Base : ";
cin>>a;
cout<<"\nEnter Height : ";
cin>>b;
ptr->get_data(a,b);
ptr->display_area();
break;
case '4':
cout<<"\n\nGoodBye ! Have a Nice Day !\n";
exit(0);
default:
cout<<"\n\nEnter a Valid Option !\n";
}
cout<<"\n\nPress Any Key to Continue....";
wait=getche();
}while(opt!='4');
}
我得到的错误是:
5 7 [Note] Shape& Shape::operator=(const Shape&)
5 7 [Note] no known conversion for argument 1 from 'Rectangle*' to 'const Shape&'
55 10 [Error] no match for 'operator=' (operand types are 'Shape' and 'Circle*')
55 10 [Note] candidate is:
5 7 [Note] Shape& Shape::operator=(const Shape&)
5 7 [Note] no known conversion for argument 1 from 'Circle*' to 'const Shape&'
62 10 [Error] no match for 'operator=' (operand types are 'Shape' and 'Triangle*')
62 10 [Note] candidate is:
5 7 [Note] Shape& Shape::operator=(const Shape&)
5 7 [Note] no known conversion for argument 1 from 'Triangle*' to 'const Shape&'
【问题讨论】:
-
请花几周时间阅读 good C++ programming 的书,然后阅读 this C++ reference 以及更多关于 virtual method tables 的信息
标签: c++ virtual-functions dynamic-binding