最近两周都在学类,修饰符,构造函数,析构函数,继承。目前来说,不算掌握的太深,但最起码掌握了一点类,构造函数及继承。
上周,俱乐部大佬布置了作业,根据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:本文属作者原创,如需转载请及时联系作者。本文属于初学者小白文,可能存在语言逻辑,概念错误,如有发现请各位指出。代码可能不精简,请见谅。
互相学习,共同进步!谢谢客观光临,如有宝贵意见,不胜感激!