C++(四)

一、代码重用

源文件:

#include <iostream>
#include"Circle.h"
using namespace std;

void Circle::Input() { cin >> r; while (r < 0) cin >> r; }
double Circle::CRadius() { return r; }
double Circle::CArea() { return (3.14 * r * r); }
double Circle::CLen() {	return (3.14 * 2 * r); }
Circle::Circle() { r = 0; }
Circle::Circle(double x) { if (x < 0) r = 0; else r = x; }
Circle::Circle(Circle& x) { r = x.r; }

头文件:

class Circle 
{
private:
	double r;

public:
	void Input();
	double CRadius();
	double CArea();
	double CLen();

	Circle();
	Circle(double x);
	Circle(Circle& x);
}; 

二、类的组合

源文件:

#include <iostream>
#include"TriCircle.h"
using namespace std;

double TriCircle::TArea() {
	double totalArea;
	totalArea = c0.CArea() + c1.CArea() + c2.CArea();
	return totalArea;
}
double TriCircle::TLen() {
	double totalLen;
	totalLen = c0.CLen() + c1.CLen() + c2.CLen();
	return totalLen;
}

头文件:

#include"Circle.h"
class TriCircle
{
public:
	Circle c0, c1, c2;
	double TArea();
	double TLen();
};

1、可以理解为类的嵌套,在一个类中使用另一个类中的对象、函数。
2、多级访问语法形式:组合类对象名 . 对象成员 . 对象成员的下级成员名。(受访问权限的限制)
3、对象指针:(别名:类的聚合)

TriCircle obj;
TriCircle *p = &obj;
p->c0.Input();
p->TArea();

4、访问权限的设置:下级访问权限受上级访问权限的限制。
5、组合类的构造函数:

组合类构造函数名(形参列表) : 对象成员名1(形参1),对象成员名2(形参2),…
{
    …//初始化其他非对象成员
}

(1)、有参构造函数

TriCircle :: TriCircle(double p0,double p1,double p2) : c0(p0),c1(p1),c2(p2) { }
TriCircle obj(1,2,3);

(2)、无参构造函数

TriCircle :: TriCircle() { }

(3)、拷贝构造函数

TriCircle :: TriCircle(TriCircle &rObj) : c0(rObj.c0),c1(rObj.c1),c2(rObj.c2) { }

三、类的继承与派生

源文件:

#include <iostream>
#include"BorderCircle.h"
using namespace std;

double BorderCircle::InnerArea() {
	double x = CRadius();
	return(3.14 * (x - w) * (x - w));
}
double BorderCircle::BorderArea() {
	return(CArea()-InnerArea());
}
void BorderCircle::Input() {
	Circle::Input();
	cin >> w;
}

头文件:

#include"Circle.h"

class BorderCircle :public Circle {
public:
	double w;
	double InnerArea;
	double BorderArea();
	void Input();
};

1、语法:

class 派生类名:继承方式1 基类1,继承方式2 基类2,..//派生类声明部分
{
    public:
        新增公有成员
    protected:
        新增保护成员
    private:
        新增私有成员
);
各新增函数成员的完整定义//派生类实现部分

2、注意:

—基类的构造函数和析构函数不能被继承,派生类需重新编写自己的构造函数、析构函数。
—继承后,派生类会对其基类成员按照继承方式进行再次封装。

继承方式有3种:

(1)、public(公有继承):对基类不封装,权限不变;

(2)、protected(保护继承):对基类封装,统统被改为private,不是删除,而实际上是派生类要将其基类成员全部隐藏起来;

(3)、private(私有继承):对基类半封装,public改为protected,其余两个不变;

—使用时可以直接引用基类成员,但要是派生类中有重名的话要声明类:

BorderCircle
——访问公有的基类成员:
obj.Circle::Input();
obj.CRadius();
obj.r;
——访问公有的新增成员:
obj.Input();
obj.InnerArea();
obj.w;

3、保护权限与保护继承

(1)、类的保护权限:向其派生类定向开放的一种权限,其他情况和private一样不可被访问;

(2)、类的保护继承:注意基类public要变成protected;半封装,对下级派生类显示,对外部不能隐藏;

4、派生类的构造函数:(先基类,再新增)

——有参构造函数
BorderCircle :: BorderCircle(double p1,p2) : Circle(p1) { w=p2; }
——无参构造函数
BorderCircle :: BorderCircle() { w=0; }
——拷贝构造函数
BorderCircle :: BorderCircle(BorderCircle& rObj) : Circle(rObj) { w=rObj.w; }

5、派生类析构函数:(先新增,再基类)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值