c++程序设计语言具有封装性、多态性和继承性,简单来说封装性就是将一个类的数据成员设置为私有类型,仅在类内可见,对象不可在类外访问它的数据成员。这就需要为类设置一个或多个接口,以便对象操作或访问其数据成员。由此在类中设置公有类型的成员函数,通过成员函数这个接口,来操作类中的私有数据。那么为什么c++要先设置私有数据成员,再用公有成员函数来访问它呢?一是提高了代码的安全性,防止错误的输入和输出。比如我们输入了一个超出范围的数,又或者说有时候我们要控制用户输入数的范围,都可以通过设置接口来实现。二是类中的成员函数相互之间比较独立,当一个函数对数据的操作改变时,不会影响其他函数的改变。比如下面的代码:
#include<iostream>
using namespace std;
class Human
{
public:
void SetTall(int x);
void SetWeight(int x);
void GetTall();
void GetWeight();
private: //私有数据成员,对象不能在类之外访问
int tall;
int weight;
};
void Human::SetTall(int x) //::是域作用符,表示SetTall是Human类中的成员
{
tall=x;
}
void Human::SetWeight(int x)
{
if(x>=90&&x<=120) //控制数据的输入范围
weight=x;
else
{
cout<<"请输入90~120之间的数字,否则体重默认为92"<<endl;
weight=92;
}
}
void Human::GetTall()
{
cout<<tall<<endl;
}
void Human::GetWeight()
{
cout<<weight<<endl;
}
int main()
{
Human tang;
int x;
cout<<"请输入tang的身高:"<<endl;
cin>>x;
tang.SetTall(x);
cout<<"请输入tang的体重:"<<endl;
cin>>x;
tang.SetWeight(x);
cout<<"身高:"<<endl;
tang.GetWeight();
cout<<"体重:"<<endl;
tang.GetTall();
return 0;
}
运行结果:
内联函数:
内联函数是用inline关键字修饰的函数,它具备函数的结构,但是却没有函数的性质。一般的函数在调用时,会回到函数定义的地方执行子函数,执行完毕后再返回到主函数,继续向下一子句执行代码。但是内联函数则是将整段代码在编译的时候复制到调用的地方执行,避免了执行期间的跳转,省去了调用过程。但须注意的是,由于每当代码调用到内联函数,就需要在调用处直接插入一段该函数的代码,所以程序的体积将增大。内联函数的实质就是牺牲一定的空间,换取代码执行的时间。
class S
{
public:
inline void fun(int x);//显示声明内联函数
void Show()//隐式声明(默认)内联函数
{
cout<<a;
}
private:
int a;
};
inline void S::fun(int x)
{
a=x;
}
但是编译器也不是完全按照内联函数的定义来执行,是否被当作内联函数,还要视代码段的大小而定。假如一段代码占用空间很大,或者在主函数中被多次调用,即使声明了为内联函数,编译器也还是会当作普通函数来处理;内联函数体中,不能有循环语句、if语句或switch语句,否则,函数定义时即使有inline关键字,编译器也会把该函数作为非内联函数处理。一小段子函数没有声明为内联函数,编译器也可能当作内联函数来处理。