C++基础——继承

1、公有、私有和受保护继承

    如果一个类的成员被定义成该类的私有成员,那么只有基类的成员和友元可以访问类中的私有成员。同时派生类也无法访问基类的私有成员,派生类的实例对象也无法访问这些私有成员。如果派生类为公有继承,基类成员保持自己的访问级别:基类的public成员为派生类的public成员,基类的protected成员为派生类的protected成员。如果是受保护成员,基类的public和protected成员在派生类中为protected成员。如果是私有继承,基类中的所有成员在派生类中为private成员。

    对于私有和保护继承,派生类中的函数成员可以调用基类中的数据成员(但是基类中的所有成员在派生类中都是私有的),派生类实例后的对象是无法访问基类中的那些成员的。

class fruit
{
public:
	fruit() :name(""),quality(100) {}
	~fruit() {}
	void print()
	{
		cout << "This is fruit!" << endl;
	}
protected:
	string name;
private:
	int quality;
};
class Apple :private fruit
{
public:
	Apple() {}
	~Apple() {}
	void setName()
	{
		name = "Apple";
	}
	void print()
	{
		cout << name << endl;
	}
};
int main()
{	Apple apple;
	apple.setName();
	apple.print();
	apple.name = "pear";//这样使用时错误的,就像任何类的私有成员是不能在类外直接进行访问的。
	
	return 0;
}

如果想要使用基类中的数据成员的话,可以在public后面加上using fruit::name;

class Apple :private fruit
{
public:
	Apple() {}
	~Apple() {}
	using fruit::name;
	void setName()
	{
		name = "Apple";
	}
	void print()
	{
		cout << name << endl;
	}
};
int main()
{Apple apple;
	apple.setName();
	apple.print();
	apple.name = "pear";
	cout << apple.name << endl;
	return 0;
}

2、基类和派生类的转换

    可以使用派生类的对象给基类的对象进行初始化操作。也存在从派生类型引用到基类类型引用的自动转换,即,可以将派生类对象的引用转换为基类子对象的引用,对指针也类似。但是没有从派生类对象到基类对象的直接转换。

    如果是public继承,则用户可以将派生类转换成基类。但是如果派生类是private或protected继承派生的,则无法将派生类对象转换成基类对象。private继承的话,派生类无法转换成基类。protected继承,则派生类的成员可以转换成基类类型。

	Apple bigApple;
	fruit apple2 = bigApple;//这里的转换就是错误的。由上面的代码可知Apple私有继承fruit,所以无法将派生类直接转换成基类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值