敲多态时发现的问题

语法错误,标志符“point”,

因为point类在Figure后面,程序先后执行,所以就会不认识point,以后要注意先后顺序。vs代码:

// ConsoleApplication4.cpp: 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include"iostream"
using namespace std;
class point
{
public:
point(int _x = 0, int _y = 0) :x(_x), y(_y)
{}
int get_x()
{
return x;
}
int get_y()
{
return y;
}
protected:
int x;
int y;
};


class Figure
{
public:
Figure(point _point = (0, 0)) :middle(_point)
{}
virtual void draw() = 0;
virtual void move(point _point) = 0;
virtual void rotate(int _t) = 0;
protected:
point middle;
};


class Circle :public Figure, public point
{
public:
Circle(int _x, int _y, int _r) :point(_x, _y), r(_r)
{}
void move(point _point);
void draw();
void rotate(int _t)
{}
protected:
int r;
};
void Circle::move(point _point)
{
x = _point.get_x();
y = _point.get_y();
}
void Circle::draw()
{
cout << "A circle with center (" << x << ", " << y << ") and radius " << r << '.' << endl;
}


class Square :public point, public Figure
{
public:
Square(int _x, int _y, int _d, int _t) :point(_x, _y), d(_d), t(_t)
{}
void draw();
void move(point _point);
void rotate(int _t);
private:
int d;
int t;
};
void Square::move(point _point)
{
x = _point.get_x();
y = _point.get_y();
}
void Square::draw()
{
cout << "A square with center (" << x << ", " << y << ") side length " << d << ". The angle between one side and the X-axis is " << t << '.' << endl;
}
void Square::rotate(int _t)
{
t = _t;
}
int main()
{
Circle c(1, 2, 3); //构建圆形,参数:圆心、半径
Square s(4, 5, 6, 0); //构建矩形,参数:
Figure *f = &c, &g = s; //基类指针指向子类对象
f->draw();
f->move(point(2, 2));  //将圆移动到(2,2)位置
f->draw();  //画圆形
s.draw(); //画矩形
s.rotate(1); //旋转矩形
s.draw();
return 0;

}                     

2.figure和point,figure中函数能调用point构造函数,所以point和figure是组合关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译多态和运行多态是面向对象编程中的两种多态性。编译多态是指在编译根据实际参数的数据类型、个数和次序来确定执行重载方法。例如,在Java中,当对象引用本类实例,调用toString()方法是编译多态。\[1\]而运行多态是指在运行根据对象的实际类型来确定执行的方法。在运行多态中,通过将基类的函数声明为虚接口(虚函数),子类可以重写这些虚接口以实现子类特有的具体功能。\[3\] 编译多态的优点是在编译就能确定执行的方法,提高了程序的效率。而运行多态的优点是可以根据对象的实际类型来动态确定执行的方法,增加了程序的灵活性和可扩展性。\[1\]\[3\] 然而,编译多态的缺点是在编译就确定了执行的方法,无法根据对象的实际类型来动态确定执行的方法。而运行多态的缺点是需要在运行进行类型检查和动态绑定,增加了一定的开销。\[1\]\[3\] 总结来说,编译多态和运行多态都有各自的优点和缺点,根据实际需求选择合适的多态性来设计和实现程序。 #### 引用[.reference_title] - *1* [编译多态和运行多态](https://blog.csdn.net/twx31420/article/details/108981026)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C++编译多态和运行多态](https://blog.csdn.net/TABE_/article/details/116865956)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值