c++面向对象特性之继承(1)

c++面向对象特性之继承(1)

总结一下c++关于继承的学习
1.为什么使用继承?
在进行类的创建时,有很多类之间,存在着包含关系,那么当创建了一个大的类以后,再创建细化后的一个类,该细化后的类除了拥有自己特殊的成员函数外,他也具有大类中具有的基本成员函数,那么,我们没有必要再将这些大类中已经实现过的类再去写一遍,直接使用继承这个特性,可以省去很多麻烦。
2.举例说明:

这是一个Person类

#include<string>
using namespace std;
class Person
{
	public:
	void eat();
	string m_strName;
	string m_strGender;
	string m_strAge;
}

再定义一个worker类

#include<string>
using namespace std;
class Worker
{
	public:
	void eat();
	void work();
	string m_strName;
	string m_strGender;
	string m_strAge;
	int m_iSalary;
}

可以看到,worker类拥有person类所有的成员函数和成员变量,同时还有i_salary变量和work()成员函数,那么如果使用继承,worker类就可以直接这样写出来:

class worker:public Person
{
	public:
	void work();
	int m_iSalary;
}

可以看到只需写出worker类特有的内容即可,因此,worker类和Person类存在继承关系。
worker类被称为 派生类 或者是子类
Person类被称为 基类 或者是父类

worker类创建成功,其中的person类对象虽然省略掉没写,但是依然是存在的。如下图(转载于慕课网james_yuan的c++课程):
在这里插入图片描述
worker中 m_strName m_iAge虽然没有单独申明,但是你创建一个对象,也还是可以调用这几个属性的,让我们用代码来验证一下。

#include "person.h"
#include<iostream>
using namespace std;
Person::Person()
{
	cout<<"Person()"<<endl;
}
Person::~Person()
{
	cout<<"~Person()"<<endl;
}

void Person::eat()
{
	cout<<"eat()"<<endl;
}

//worker.cpp
#include"worker.h"
#include <iostream>
using namespace std;	
worker::worker()
{
	cout<<"worker()"<<endl;
}
worker::~worker()
{
	cout<<"~worker"<<endl;
}
void worker::work()
{
	cout<<"work()"<<endl;
}


//main.cpp
#include "worker.h"
#include <iostream>
using namespace std;
int main()
{
	worker *p = new worker();
	delete p;
	p = NULL;
	system("pause");
	return 0;
}

我将person类和worker类都写出其构造函数和析构函数,其内容都为打印函数名,这样可以直接反映继承了person类的worker类,他们两者之间的构造函数,析构函数的运行顺序是怎么样的,运行后如下图所示:
在这里插入图片描述
先是基类构造函数->派生类构造函数->派生类析构函数->基类析构函数
那么我们可以调用person类中存在,worker类声明时省略的函数吗?

int main()
{
	worker *p = new worker();
	p->m_strName = "jiger";
	p->m_strAge = "21";
	cout<<p->m_strName<<endl;
	cout<<p->m_strAge<<endl;
	delete p;
	p = NULL;
	system("pause");
	return 0;
}

访问并修改Name和Age变量,输出:
在这里插入图片描述
成功修改!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值