C++使用private
,public
和protected
关键字约束类成员的可访问范围(可见性)。
private
指定私有成员,说明定义的函数或变量只能在该类的成员函数内使用,其他对成员变量的访问必须通过成员函数进行;public
定义了类的公用接口,可以在任何地方被访问;protected
指定了被保护的成员变量和函数,这类函数只能在类的成员函数内、子类或友元中被访问。class 类名 { private: 私有属性和函数 public: 公有属性和函数 protected: 保护属性和函数 };
三种关键字出现的次数和先后顺序没有限制。在类中不使用上述关键字指定可访问范围的属性和函数默认为private
。
C++
中struct
也是一种类,只不过在类中不使用上述关键字指定可访问范围的属性和函数默认为public
。
/***************************************
* visit_scope.cpp *
* *
* C++类的访问权限 *
***************************************/
#include <string>
#include <iostream>
class CEmployee
{
std::string name;
public:
int salary;
public:
void SetName(std::string _name){name = _name;}
std::string GetName(){return name;}
int AverageSalary(CEmployee e1, CEmployee e2);
};
int CEmployee::AverageSalary(CEmployee e1, CEmployee e2)
{
return (e1.salary + e2.salary) / 2;
}
struct Loc
{
float lat;
float lon;
float alt;
void TellLat(){std::cout<<"lat: "<<lat<<std::endl;}
void TellLon(){std::cout<<"lon: "<<lon<<std::endl;}
void TellAlt(){std::cout<<"alt: "<<alt<<std::endl;}
};
int main()
{
CEmployee e;
/*e.name = "Tom";*///错误,默认为私有,不能访问私有成员
e.SetName("Tom");
e.salary = 5000;
CEmployee e1;
e1.SetName("Jim");
e1.salary = 6000;
std::cout<<"e和e1的平均工资为"<<e.AverageSalary(e,e1)<<std::endl;
Loc loc;
loc.lat = 10;//正确,struct默认为公有,可以访问
loc.lon = 10;
loc.alt = 10;
loc.TellLat();
loc.TellLon();
loc.TellAlt();
return 0;
}
参考文献
- Bjarne Stroustrup著,裘宗燕译. C++程序设计语言(特别版).机械工业出版社 2009
- https://www.coursera.org/course/pkupop