面向对象有三大特征:封装、继承、多态。(具体会在之后的课程里讲)
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;
}
编译程序,报错:

这是因为,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;
}
编译程序,报错:

报错理由跟上面的差不多,因为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相同:

可见如果不加任何关键字,无论是属性还是方法,默认都是private。
加入少儿信息学奥赛学习QQ群请扫左侧二维码,关注微信公众号请扫右侧二维码
QQ群和公众号.png
网友评论