小朋友学C++(4):public, protected, private

来源:互联网 发布:建行软件下载 编辑:程序博客网 时间:2024/04/30 04:03

面向对象有三大特征:封装、继承、多态。(具体会在之后的课程里讲)

C++用三个关键词来表示访问范围:public, protected, private。
public和private作用就是实现封装。类外的代码可以访问public成员而不能访问private成员;private成员只能由类成员访问。
protected的作用则是实现继承。protected成员可以被派生类(也叫子类)对象访问,不能被用户代码类外的代码访问。

例1:private修饰属性和方法

#include <iostream>using namespace std;class Dog{   private:    string name;    void run()    {        cout << "running..." << endl;    }};int main(){    Dog dog;    dog.name = "Wang Cai";    dog.run();    return 0;}

编译程序,报错:
1.png

这是因为,name和run()都是私有的,类外的main()没有权限访问dog.name和dog.run()

例2:将private改为protected

#include <iostream>using namespace std;class Dog{   protected:    String name;    void run()    {        cout << "running..." << endl;    }};int main(){    Dog dog;    dog.name = "Wang Cai";    dog.run();    return 0;}

编译程序,报错:
2.png

报错理由跟上面的差不多,因为name和run()是protected, 外部的main()没有权限访问。

例3:将protected改为public

#include <iostream>using namespace std;class Dog{   public:    string name;    void run()    {        cout << "running..." << endl;    }};int main(){    Dog dog;    dog.name = "Wang Cai";    dog.run();    return 0;}

程序正常运行。运行结果:

running...

有些人可能会想,我不加任何关键字,后果会怎样?
例4:不加修饰符

#include <iostream>using namespace std;class Dog{       string name;    void run()    {        cout << "running..." << endl;    }};int main(){    Dog dog;    dog.name = "Wang Cai";    dog.run();    return 0;}

编译报错,错误与例1相同:
4.png

可见如果不加任何关键字,无论是属性还是方法,默认都是private。



更多内容请关注微信公众号
wchat.jpg