找回密码
 立即注册
收起左侧

C++编程中的继承中虚函数问题

3
回复
7533
查看
[复制链接]
累计签到:86 天
连续签到:1 天
来源: 2016-9-30 23:10:49 显示全部楼层 |阅读模式
5Qter豆
自定义类表示矩形(Rectangle)。
要求:
1、        有成员属性width(长,int),成员属性height(宽,int)。
2、        将width和height设置为私有属性,并提供公开的get,set函数。
3、        有合理的构造函数,构造函数必须初始化height和width。

自定义类表示正方形(Square)继承自矩形(Rectangle)
要求:
1、        改写父类的set函数,保证当正方形修改变长时长和宽都会改变。
2、        有合理的构造函数,构造函数必须初始化Rectangle

自己的代码:
头文件:
#ifndef  RECTANGLE_H_
#define  RECTANGLE_H_

class Rectangle
{
public:
Rectangle(const int& width=1,const int& height=1)
:width(width),height(height){}
virtual void setWidth(const int& width){this->width=width;}
int getWidth()const{return width;}
virtual void setHeight(const int& height){this->height=height;}
int getHeight()const{return height;}
private:
int width;
int height;
};

cpp文件:
#include "rectangle.h"
#include <iostream>
using namespace std;

Square::Square(const int& width,const int& height)
{
if(width!=height)
{
cout<<"width,height must be same"<<endl;
}
Rectangle(width,width);
}

/*
因为父类的成员是私有的,重写后,私有类的共有函数接口没有了,直接调用不行,用父类::set函数也不行!
问题:怎么重写虚函数才能实现题目要求
*/
void Square::setWidth(const int& width)
{
this->width=width;
if(getHeight()!=width)
{
setHeight(width);
}
}

void Square::setHeight(const int& height)
{
/*
this->height=height;
this->width=height;
*/
}

回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2016-10-3 19:10:40 显示全部楼层
要保证子类的width和height相同,首先变量是不能直接访问的,因为是父类私有成员,因此只能通过接口修改。
Square::setWidth中通过作用域访问父类setWidth接口,设置width值,接下来通过接口getHeight获取高度,判断返回值是否和当前参数中的width相同,如果不相同,则通过作用域访问父类setHeight接口设置height,否则不做处理
Square::setHeight中和上述方式一样,只是通过高度来处理宽度
回复

使用道具 举报

累计签到:86 天
连续签到:1 天
2016-10-4 20:34:56 显示全部楼层
任路 发表于 2016-10-3 19:10
要保证子类的width和height相同,首先变量是不能直接访问的,因为是父类私有成员,因此只能通过接口修改。
...

但是我用子类改写父类的设置函数后,我在子函数里面访问不了父函数里面的接口函数了,已经被改写了
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2016-10-4 22:03:26 显示全部楼层
maoxuechun 发表于 2016-10-4 20:34
但是我用子类改写父类的设置函数后,我在子函数里面访问不了父函数里面的接口函数了,已经被改写了 ...

可以啊 没问题  通过作用域就可以访问的       子类函数能被调用时因为多态或者父类接口被重写,但是子类几口里通过父类名称可以直接访问父类接口
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了