访问控制

在此前的例子里,我们无论是Animal,Pig和Turtle类里的所有成员都是用public:语句声明。

所谓访问控制,就是C++提供了一种用来保护类里的方法和属性的手段

这里所说的保护的意思是对谁可以调用某个方法和访问某个属性加上一个限制。如果某个对象试图调用一个它无权访问的函数,编译器将报错。

我们看下C++的访问级别:

         级别                  允许谁来访问
        public                     任何代码
      protected           这个类本身和它的子类
        private                 只有这个类本身

利用访问级别来保护类里的方法和属性很简单,只要在类里的某个地方写出一个访问级别并在其后加上一个冒号,从那个地方开始往后的所有方法和属性都将受到相应的保护,直到遇到下一个访问级别或者到达这个类的末尾为止!

#include <iostream>
#include <string>

class Animal
{
protected:
	std::string mouth;
	std::string name;

	Animal(std::string theName);
	void eat();
	void sleep();
};

class Pig : public Animal
{
public:
	void climb();
	Pig(std::string theName);
};

class Turtle : public Animal
{
public:
	void swim();
	Turtle(std::string theName);
};

Animal::Animal(std::string theName)
{
	name = theName;
}

Pig::Pig(std::string theName) : Animal(theName)
{
}

Turtle::Turtle(std::string theName) : Animal(theName)
{
}

void Animal::eat()
{
	std::cout << "I'm eatting!" << std::endl;
}

void Animal::sleep()
{
	std::cout << "T'm sleeping!" << std::endl;
}

void Pig::climb()
{
	std::cout << "我会爬树!" << std::endl;
}

void Turtle::swim()
{
	std::cout << "我会游泳!" << std::endl;
}

int main()
{
	Pig pig("小猪猪");
	Turtle turtle("小甲鱼");

	pig.name = "小甲鱼" << std::endl;

	std::cout << "这只猪的名字是:" << pig.name << std::endl;
	std::cout << "我看的视频的作者是:" << turtle.name << std::endl;

	return 0;
}

这样就报错了,因为上面的访问控制变成了protected。

但是我有一点不懂,用了protected这个不是可以用在它和它的子类吗?这里的pig是它的Pig子类的对象啊,为啥不行?

明白了,这属于外部代码了,不能用了


课后提问:

class Pig : public Animal{...}

这里的public是什么意思?

- public

是在告诉编译器:继承的方法和属性的访问级别不发生任何改变,即public仍可以被所有代码访问,protected只能由基类和其子类访问,private则只能由基类本身访问。

- protected

如果原来是public的话,把基类的访问级别改为protected。这将使得这个子类外部的代码无法通过子类去访问基类中的public。

-private

是在告诉编译器从基类继承来的每一个成员都当成private来对待,这意味着只有这个子类可以使用它从基类继承来的元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值