C++ 静态数据成员与静态函数成员实例 友元函数实例 动态分配内存实例

简介: C++ 静态数据成员与静态函数成员实例 友元函数实例 动态分配内存实例

1. 静态数据成员与静态函数成员实例


de9e3c491a072d6e508d9a7d87234fcd_948b1d6a0658466682a241f753a1f138.png


程序一:


#include<bits/stdc++.h>
using namespace std;
class Cat{
  public:
  Cat(int age1=0)
  {
    age=age1;
    numOfCats++;
  }//构造函数,总数加一
  ~Cat()
  {
    numOfCats--;
  }//析构函数,个数减一
  Cat(Cat &p)
  {
    age=p.age;
    numOfCats++;
  }//复制构造函数,个数加一
  void getage()
  {
    cout<<age<<endl;
  }//输出年龄
  static void getNumOfCats()
  {
    cout<<"cat的数量为:"<<numOfCats<<endl;
  }//静态成员函数  输出总数
  void reage(int age1)
  {
    age=age1;
  }//修改年龄
  private:
  static int numOfCats;//静态数据成员
  int age; 
};
int Cat::numOfCats=0;//外部定义一次,赋初值,开辟单独空间
int main()
{
  Cat a(12);
  Cat::getNumOfCats();//创建对象a 利用构造函数 输出总个数
  Cat b=a;
  Cat::getNumOfCats();//创建对象b 利用复制构造函数 输出总个数
  a.reage(6);
  b.getage();
  Cat::getNumOfCats();//调用修改函数和输出函数,查看这两个函数对总数的影响
}


结果:


e6862951b2a507f054a1da7f796365c5_1b60d013d8c045c4aabff45d3c62737d.png


程序二(使用动态分配内存):


#include<bits/stdc++.h>
using namespace std;
const int N = 1e4;
int n,t;
class Cat{
  public:
  Cat(int age1=0)
  {
    age=age1;
    numOfCats++;
  }//构造函数,总数加一
  ~Cat()
  {
    numOfCats--;
  }//析构函数,个数减一
  Cat(Cat &p)
  {
    age=p.age;
    numOfCats++;
  }//复制构造函数,个数加一
  void getage()
  {
    cout<<"第"<<numOfCats<<"个对象的年龄为:"<<age<<endl;
  }//输出年龄
  static void getNumOfCats()
  {
    cout<<"cat的数量为:"<<numOfCats<<endl;
  }//静态成员函数  输出总数
  void reage(int age1)
  {
    age=age1;
  }//修改年龄
  private:
  static int numOfCats;//静态数据成员
  int age; 
};
int Cat::numOfCats=0;//外部定义一次,赋初值,开辟单独空间
int main()
{
  Cat *cat[N];
  cin>>n;//输入个数
  for(int i=1;i<=n;i++)
  {
  cin>>t;//输入每个对象的age
  cat[i]=new Cat(t);//每一个对象使用new函数创建
  cat[i]->getage();//注意用 -> 去访问
  Cat::getNumOfCats();//输出个数
  }
  cout<<endl;
  for(int i=1;i<=n;i++)
  {
  delete cat[i];//依次删除每个对象
  Cat::getNumOfCats();
  }
}


输入和结果:


132943d0fb0adc123a8ab70659d9ec0f_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBALkFzaHku,size_20,color_FFFFFF,t_70,g_se,x_16.png


2.友元函数实例


7edbfd2791a77e57d8a8cb1505ac24ed_ce8006b09a274dbba24034a730fd4014.png


程序一:


#include<bits/stdc++.h>
using namespace std;
class Boat;//提前声明Boat类
class Car{
  private:
  int weight;
  public:
  Car(int weight1=0)
  {
    weight=weight1;
  }//构造函数
  ~Car(){}//析构函数
  friend int getTotalWeight(Car &Cara,Boat &Boata);//友元函数,注意在其中是类的引用,方便且高效
};
class Boat{
  private:
  int weight;
  public:
  Boat(int weight1=0)
  {
    weight=weight1;
  }//构造函数
  ~Boat(){}//析构函数
  friend int getTotalWeight(Car &Cara,Boat &Boata);
};
int getTotalWeight(Car &Cara,Boat &Boata)
{
  return Cara.weight+Boata.weight;
}//友元函数实现,可直接访问两个类的私有成员 
int main()
{
  Boat a(11);
  Car b(12);//创建两个类
  cout<<getTotalWeight(b,a)<<endl;//输出总重
  Boat c(123);
  Car d(122);//创建两个新类
  cout<<getTotalWeight(d,c);//输出总重
}


结果:


9f8a0847ce36b0dd9c553ba0d7451feb_278b2d408b6c4b6894406c8454948fc4.png


程序二(动态分配内存):


#include<bits/stdc++.h>
using namespace std;
int weight1,weight2;
class Boat;
class Car{
  private:
  int weight;
  public:
  Car(int weight1=0)
  {
    weight=weight1;
  }
  ~Car(){}
  friend void getTotalWeight(Car &Cara,Boat &Boata);
};//类Car
class Boat{
  private:
  int weight;
  public:
  Boat(int weight1=0)
  {
    weight=weight1;
  }
  ~Boat(){}
  friend void getTotalWeight(Car &Cara,Boat &Boata);
};//类Boat
void getTotalWeight(Car &Cara,Boat &Boata)
{
  cout<<Cara.weight+Boata.weight;
}//友元函数
int main()
{
  Boat *boat[11];
  Car *car[11];//创建两个类的组
  for(int i=1;i<=3;i++)
  {
  cin>>weight1>>weight2;
  car[i]=new Car(weight1);
  boat[i]=new Boat(weight2);
  cout<<"第"<<i<<"组的总重为:";
  getTotalWeight(*car[i],*boat[i]);//每一组调用友元函数并输出,注意调用的时候带上 * 号;
  cout<<endl;  
  }
}


结果:


9f8a0847ce36b0dd9c553ba0d7451feb_278b2d408b6c4b6894406c8454948fc4.png


总结:关于类的动态分配内存非常方便,关于其应用的new函数与delete函数也非常的好用,

但要注意当调用带引用的友元函时,使用时要带好星号,传入指针


getTotalWeight(*car[i],*boat[i]);


当访问动态分配内存对象的外部接口时,要使用箭头;


cat[i]->getage();


更新:


动态内存分配是通过指针来实现的,当通过指针来调用类的成员时要用箭头来实现;


目录
相关文章
|
4月前
|
存储 监控 算法
基于 C++ 哈希表算法实现局域网监控电脑屏幕的数据加速机制研究
企业网络安全与办公管理需求日益复杂的学术语境下,局域网监控电脑屏幕作为保障信息安全、规范员工操作的重要手段,已然成为网络安全领域的关键研究对象。其作用类似网络空间中的 “电子眼”,实时捕获每台电脑屏幕上的操作动态。然而,面对海量监控数据,实现高效数据存储与快速检索,已成为提升监控系统性能的核心挑战。本文聚焦于 C++ 语言中的哈希表算法,深入探究其如何成为局域网监控电脑屏幕数据处理的 “加速引擎”,并通过详尽的代码示例,展现其强大功能与应用价值。
106 2
|
2月前
|
安全 C语言 C++
比较C++的内存分配与管理方式new/delete与C语言中的malloc/realloc/calloc/free。
在实用性方面,C++的内存管理方式提供了面向对象的特性,它是处理构造和析构、需要类型安全和异常处理的首选方案。而C语言的内存管理函数适用于简单的内存分配,例如分配原始内存块或复杂性较低的数据结构,没有构造和析构的要求。当从C迁移到C++,或在C++中使用C代码时,了解两种内存管理方式的差异非常重要。
126 26
|
5月前
|
存储 C++
UE5 C++:自定义Http节点获取Header数据
综上,通过为UE5创建一个自定义HTTP请求类并覆盖GetResult方法,就能成功地从HTTP响应的Header数据中提取信息。在项目中使用自定义类,不仅可以方便地访问响应头数据,也可随时使用这些信息。希望这种方法可以为你的开发过程带来便利和效益。
209 35
|
3月前
|
C语言 C++
c与c++的内存管理
再比如还有这样的分组: 这种分组是最正确的给出内存四个分区名字:栈区、堆区、全局区(俗话也叫静态变量区)、代码区(也叫代码段)(代码段又分很多种,比如常量区)当然也会看到别的定义如:两者都正确,记那个都选,我选择的是第一个。再比如还有这样的分组: 这种分组是最正确的答案分别是 C C C A A A A A D A B。
59 1
|
6月前
|
存储 Linux C语言
C++/C的内存管理
本文主要讲解C++/C中的程序区域划分与内存管理方式。首先介绍程序区域,包括栈(存储局部变量等,向下增长)、堆(动态内存分配,向上分配)、数据段(存储静态和全局变量)及代码段(存放可执行代码)。接着探讨C++内存管理,new/delete操作符相比C语言的malloc/free更强大,支持对象构造与析构。还深入解析了new/delete的实现原理、定位new表达式以及二者与malloc/free的区别。最后附上一句鸡汤激励大家行动缓解焦虑。
|
6月前
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
350 6
|
7月前
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
112 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
7月前
|
安全 C语言 C++
彻底摘明白 C++ 的动态内存分配原理
大家好,我是V哥。C++的动态内存分配允许程序在运行时请求和释放内存,主要通过`new`/`delete`(用于对象)及`malloc`/`calloc`/`realloc`/`free`(继承自C语言)实现。`new`分配并初始化对象内存,`delete`释放并调用析构函数;而`malloc`等函数仅处理裸内存,不涉及构造与析构。掌握这些可有效管理内存,避免泄漏和悬空指针问题。智能指针如`std::unique_ptr`和`std::shared_ptr`能自动管理内存,确保异常安全。关注威哥爱编程,了解更多全栈开发技巧。 先赞再看后评论,腰缠万贯财进门。
340 0
|
7月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
3月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
91 0