C++继承的三种方式

C++中的继承

继承的方式

  1. 公共继承
  2. 保护继承
  3. 私有继承

说明:无论用那种方式继承,子类在继承父类后都不能访问父类中的私有内容。
在继承的时候,不可访问的内容其实是存在于子类中的,但是对子类做了隐藏,无法访问而已。

继承的基本语法

例如:创建一个儿子类用公共继承的方式继承了父亲类
父类:

class Father
{
protected:
	int money;
private:
	int m_privacy;
public:
	int m_age;
	Father(/* args */);
	~Father();
};

Father::Father(/* args */)
{
	cout<<"我是你爹"<<endl;
}

Father::~Father()
{
}

儿子类公共继承父亲类:

class Son : public Father
{
private:
	/* data */
public:
	Son(/* args */);
	~Son();
};
Son::Son(/* args */)
{
		m_age=1000;
		money=2000;
	cout<<"我是儿子"<<endl;

}
Son::~Son()
{
}
void test01()
{
	Son s1;
	s1.m_age=10;//类外可以访问
}

说明:用公共方式继承的,父类中的公共和保护在子类内都可以访问。类外也可以访问公共的。

用保护的方式的继承

class Son : protected Father
{
private:
	/* data */
public:
	Son(/* args */);
	~Son();
};

Son::Son(/* args */)
{
		m_age=1000;
		money=2000;
	cout<<"我是儿子"<<endl;

}
Son::~Son()
{
}

在这里插入图片描述
说明:用保护方式继承的,父类中的公有内容在子类中变为保护,只能在类内访问,在类外便访问不到了。

私有继承

class Son : private Father
{
private:
	/* data */
public:
	Son(/* args */);
	~Son();
};

Son::Son(/* args */)
{
	m_age=1000;
	
	cout<<"我是儿子"<<endl;

}

Son::~Son()
{
}

在这里插入图片描述
说明:用私有方式继承,把原来的父类中为公共和保护的成员在子类中都成了私有,只能在类内做访问。在类外访问不到了。

构造和析构顺序

以上面的例子为例:

void test01()
{
	Son s1;//创建了一个儿子类
}

int main(void)
{
	test01();


	system("pause");
	return 0;
}

输出结果:
在这里插入图片描述
显然是先进行了父类的构造,再进行了子类的构造。析构的顺序相反。

继承时同名成员的处理方式

当子类与父类出现同名的成员时,怎么区分同名?

  • 访问子类的同名成员,直接访问即可
  • 访问父类中的同名成员,加上作用域

例如:

#include <iostream>
#include <string>
using namespace std;

class Father
{
protected:
	int money;
private:
	int m_privacy;
public:
	int m_age;
	Father(/* args */);
	~Father();
};

Father::Father(/* args */)
{
	m_age=30;//初始化
}

Father::~Father()
{
}


class Son : public Father
{
private:
	/* data */
public:
	int m_age;//在子类中添加同名的成员
	Son(/* args */);
	~Son();
};

Son::Son(/* args */)
{
	m_age=20;//初始化
	

}

Son::~Son()
{
}

void test01()
{
	Son s1;

	cout<<"儿子的年龄"<<s1.m_age<<","<<"父亲的年龄"<<s1.Father::m_age<<endl;
}

int main(void)
{
	test01();


	system("pause");
	return 0;
}

结果:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值