访问控制:C++提供用来保护(保护意思是对谁可以调用某个方法和访问某一个属性加上一个限制)类里的方法和属性的手段
实例1:访问级别应用
1 //级别 允许谁来访问 2 //public 任何代码 3 //protected 这个类本身和它的子类 4 //private 只有这个类本身 5 #include <iostream> 6 #include <string> 7 8 class Animal//定义Animal类 9 { 10 public: 11 std::string mouth; 12 //std::string name; 13 14 Animal(std::string theName);//类Animal的构造器 15 void eat(); 16 void sleep(); 17 void drool();//流鼻涕 18 protected: 19 std::string name; 20 }; 21 Animal::Animal(std::string theName)//类Animal构造器函数 22 { 23 name = theName; 24 } 25 26 class Pig:public Animal//类Pig继承于类Animal 27 { 28 public: 29 Pig(std::string theName);//类Pig的构造器 30 void climb(); 31 }; 32 Pig::Pig(std::string theName):Animal(theName)//类Pig的构造函数继承于类Animal的构造函数 33 { 34 35 } 36 37 class Turtle:public Animal//类Turtle继承于类Animal 38 { 39 public: 40 Turtle(std::string theName);//类Pig的构造器 41 void swim(); 42 }; 43 Turtle::Turtle(std::string theName):Animal(theName)//类Turtle的构造函数继承于类Animal的构造函数参数 44 { 45 46 } 47 48 void Animal::eat()//Animal类中的方法函数 49 { 50 std::cout << "I'm eatting!" << std::endl; 51 } 52 void Animal::sleep() 53 { 54 std::cout << "I'm sleeping!Don't disturb me!" << std::endl; 55 } 56 void Animal::drool() 57 { 58 std::cout << "我是公的,看到母的会流口水 流口水。。。" << std::endl; 59 } 60 61 void Pig::climb()//类Pig中的climb方法函数 62 { 63 std::cout << "我是一只漂亮的小母猪猪,我会上树,邱。。。" << std::endl; 64 } 65 void Turtle::swim()//类Turtle中的swim方法函数 66 { 67 std::cout << "我是一只小甲鱼,当母猪抓我,我就游到海里,哈。。。" << std::endl; 68 } 69 int main() 70 { 71 Pig pig("小猪猪");//定义一个对象pig,由于其继承于类Animal, 72 //且构造函数也继承于类Animal的构造函数,所以参数"小猪猪"将赋值给类pig中的名字属性name 73 Turtle turtle("小甲鱼");//定义一个对象turtle 74 75 //pig.name = "小甲鱼"; //由于name被保护起来,所以赋值将报错 76 77 std::cout << "这只猪的名字是:" << pig.name << std::endl; 78 std::cout << "每只乌龟都有个伟大的名字:" << turtle.name << std::endl; 79 80 pig.eat(); 81 turtle.eat(); 82 pig.climb(); 83 turtle.swim(); 84 85 return 0; 86 }
使用private的好处:可以只修改某个类的内部实现,而不必重新修改整个程序。因为其他代码根本就访问不到private保护的内容
在同一个类中可以使用多个public:,private和protected:语句,但最好把你的元素集中到一个地方,可读性会更好。
protected
把基类的访问级别改为protected,如果原来是public的话。这将使得这个子类外部的代码无法通过子类去访问基类中的public
private
是在告诉编译器从基类继承来的每一个成员都当做private来对待,这意味着只有这个子类可以使用它从基类继承来的元素。