初学C++构造函及继承 ----示例程序编写及问题分析

  最近两周都在学类,修饰符,构造函数,析构函数,继承。目前来说,不算掌握的太深,但最起码掌握了一点类,构造函数及继承。

  上周,俱乐部大佬布置了作业,根据main函数提示写出类。(主要考察的就是对类及构造函数,继承的掌握)

  题目如下:

int main()
{
Point p0(2);//默认坐标为 0,0
Point p1;
Circle c0(2,3,4);//参数顺序 x,y,半径
Rectangle r0(2,3,5,6);//参数顺序,x,y,长,宽
cout<<"Point 0: ";
p0.Show();//输出坐标
cout<<"Point 1: ";
p1.Show();
cout<<"Circle: ";
c0.Show();//半径,圆心坐标,x ,y
c0.area();//面积
cout<<"Rectangle r:";
r0.Show();//长方形左上角顶点坐标,长,宽
r0.area();//长方形面积;
return 0;
}

  刚开始,完全没有思路(主要是还没对大佬讲的理解清楚吧)。于是,再深入研究了一下C++视频后,大概理解了概念和应用。

  对于题目,没什么难理解的。主要在于该构建几个类,各类中构造函数及成员函数如何定义。

  理一下思路:

  1.类:Point;Circle;Rectangle;

  2.构造函数:Point类(Point();Point(int);Point(int,int))(前两个可以从main中看出,最后一个则是因为Rectangle和Circle中都要用到x,y,因此要继承);
                       Circle类(Circle(int,int,int));
                       Rectangle(Rectangle(int,int,int,int));

  3.成员函数: Point类(Show());//功能:输出x,y;
                        Circle类(Show();area());//功能:1.输出x,y,r;2.输出圆面积;
                        Rectangle类(Show();area());//功能:1.输出x,y,l,w;2.输出矩形面积;

  4.涉及到继承:Circle类和Rectangle类都要继承Point类中x,y的赋值;

  Let's do it!

  以下为多次修改后的正确运行代码:

  
#include<iostream>
using namespace std;

class Point
{
private:
	int x,y;
public:
	Point(int a)
	{
		x=a;
		y=0;
	}
	Point()
	{
		x=0;
		y=0;
	}
	Point(int a,int b)
	{
		x=a;
		y=b;
	}
	void Show()
	{	
		cout<<"("<<x<<","<<y<<")"<<endl;
	}
	int getsx()
	{
		return x;
	}
	int getsy()
	{
		return y;
	}
};
class Circle:public Point
{
private:
	int r;
public:
	Circle(int a,int b,int c):Point(a,b)
	{
		r=c;
	}
	void Show()
	{
		cout<<"("<<Point::getsx()<<","<<Point::getsy()<<")";
	//	Point::Show();
		cout<<","<<r<<endl;
	}
	void area()
	{
		cout<<3.14*r*r<<endl;
	}
};
class Rectangle:public Point
{
private:
	int l,w;
public:
	Rectangle(int a,int b,int c,int d):Point(a,b)
	{
		l=c;
		w=d;
	}
	void Show()
	{
		cout<<"("<<Point::getsx()<<","<<Point::getsy()<<")";
		// Point::Show();
		cout<<","<<l<<","<<w<<endl;
	}
    void area()
	{
		cout<<l*w<<endl;
	}
};

  编写代码时遇到以下几次特别low,比小白还小白的问题:

  1.创建工程为Win32 Application ,结果导致连接错误还找不到问题所在。现在知道了,是Win32 Console Application;

  2.调用父类成员函数时,写了返回值类型。就是在图中代码Point::Show()前面加的,low吧!?

  3.这个错误很多人都会犯,就是关于如何继承父类中私有类型的数据。原本我是想直接用Point::Show就可以输出x,y了,但实际输出不符合我的本意,我要求输出必须在一行中,而事实上代码输出的会换行,因此需要用到大佬教的gets(),即定义一个成员函数将私有类型的数据return。(因为初学,其他可能更简便的方法不会用)

  代码输出结果如下:

  
Point 0: (2,0)
Point 1: (0,0)
Circle: (2,3),4
50.24
Rectangle r:(2,3),5,6
30


  OK,今天就先到这里,这个程序总算会写了。写的过程中也学会了很多。

  PS:本文属作者原创,如需转载请及时联系作者。本文属于初学者小白文,可能存在语言逻辑,概念错误,如有发现请各位指出。代码可能不精简,请见谅。
          
           互相学习,共同进步!谢谢客观光临,如有宝贵意见,不胜感激!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值