版权声明:转载请注明出处,谢谢!!! https://blog.csdn.net/qhdhnbd110/article/details/83614808
将成员变量声明为private的三大理由:
1. 提供语法一致性:
如果将所有的变量都声明为private,那么当其他人使用这个类时,就不用纠结是以函数方式调用还是变量方式调用,更加节省时间。
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass(){}
~MyClass(){}
private:
std::string name;
public:
std::string GetName()
{
return this->name;
}
};
int main()
{
MyClass Me;
Me.GetName();
}
2. 可以对变量实现禁止访问、读写访问、只读访问、唯写访问:
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass(){}
~MyClass(){}
private:
std::string name;
int ClassNum; //禁止访问
int GradeNum;
public:
std::string GetName() //只读访问
{
return this->name;
}
void SetClassNum(int Cn) //唯写访问
{
ClassNum = Cn;
}
void SetGradeNum(int Gn) //读写访问
{
GradeNum = Gn;
}
int GetGradeNum()
{
return GradeNum;
}
};
3. 保证封装性:
#include <iostream>
using namespace std;
class SomeThingForSale
{
public:
SomeThingForSale(){}
~SomeThingForSale(){}
private:
int Value;
public:
int GetValue()
{
return Value;
}
};
没到双十一的时候,某件商品的价格直接通过GetValue接口即可得到,到了双十一时,由于商品要先涨价再打折o(* ̄︶ ̄*)o,我们需要重新修改GetValue的内部实现:
#include <iostream>
using namespace std;
class SomeThingForSale
{
public:
SomeThingForSale(){}
~SomeThingForSale(){}
private:
int Value;
public:
int GetValue()
{
return Value * 1.5 * 0.5;
}
};
但是,客户调用的方式依旧没有改变,这就体现了封装的重要性。
那么protected如何呢?
在没有派生类的情况下,protected和private是一样的,但是一旦出现了派生类,如果这个派生类大量使用基类的某个变量,而之后我们要删除此变量,那么修改派生类代码付出的时间代价是不可估量的。
结论:
1. 将成员变量实现为private;
2. 如果封装就一定要private,要么就不封装。