C++:静态与友元函数

2020-10-18 94点热度 1人点赞

封装性

#include <iostream>
#include <cstring>
using namespace std;
/**
 * 所谓封装性是指对象的状态信息隐藏在对象的内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的的方法来实现对内部信息的操作与访问
 * 在封装的前提下,类外如何访问被封装的成员(private和protected成员)?常规的方法是通过“对象.共有成员函数”的形式
 * */
/**
 * 要实现良好的封装性,应做到一下两点:
 * (1)将对象的成员变量与实现细节隐藏起来,不允许外部访问
 * (2)把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作
 * */
class Circle
{
public:
  Circle(double a)
  {
    r = a;
  }
  double Area()
  {
    return 3.14 * r * r;
  }

private:
  double r;
};
double AreaRing(Circle &c1, Circle &c2) //普通函数
{
  return c1.Area() - c2.Area(); //通过“对象.共有成员函数"的形式
}
int main()
{
  Circle c1(10), c2(5);             //定义圆类对象
  cout << AreaRing(c1, c2) << endl; //调用普通函数
  return 0;
}

静态成员

#include <iostream>
#include <cstring>
using namespace std;
/**
 * 类中有一种特殊的成员,它不属于某个对象,不能通过某个对象来引用,在声明时前面要加上static关键字,称为静态成员
 * 静态成员由同类所有对象共享。也就是说不管定义了多少个对象,其静态成员对象只有一个。
 * 并且静态成员的声明周期从创建开始到程序运行结束,编译器只对它进行一次初始化,将始终保持其值,知道下次改变为止。
 * 静态成员不受对象是否创建的影响
 * */
/**
 * C++中一个类有4种成员:静态数据成员和非静态数据成员、静态成员函数和非静态成员函数。
 * (1)非静态数据成员被放在每一个对象内作为对象专属的数据成员
 * (2)静态数据成员被提取出来放在程序的静态数据区内,为该类所有对象共享,因此只存在一份。
 * (3)静态和非静态成员函数最终都被提取出来放在程序的代码段中并为该类所有对象共享,因此每一个成员函数也只能存在一份代码实体。在C++中类的成员函数都是保存在
 * 静态存储区中,因此静态函数也是保存在静态存储区中的,它们都是在类中保存同一个备份。
 * 因此,构成对象本身的只有数据,任何成员函数都不隶属与任何一个对象非静态成员函数与对象的关系就是绑定,绑定的中介就是this指针。成员函数为该类所有对象共享,
 * 不仅是出于简化语言实现、节省存储空间的目的,而且是为了使同类对象有一致的行为。同类对象的行为虽然一致,但是操作的数据成员不同。
 * */
class Circle
{
public:
  Circle(double a = 0)
  {
    r = a;
    total++;
  }
  static int GetTotal()
  {
    return total;
  }
  static int total; //定义静态数据成员
private:
  double r;
};
int Circle::total = 0; //这个初始化要放在main外面,放在main里面会报错。而且int是必不可少的
int main()
{
  Circle c1(10), c2(5), c3;                                 //定义圆类对象
  cout << "定义对象的个数:" << Circle::GetTotal() << endl; //调用静态成员函数
  cout << "定义对象的个数:" << Circle::total << endl;      //调用普通函数
  return 0;
}

友元

隐藏内容需要支付:¥10

未经允许不得转载!C++:静态与友元函数

本文地址:https://ai.52learn.online/1823

站长邮箱:ai52learn@foxmail.com