文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++类的对象作类成员调用构造、析构函数及静态成员实例分析

2023-06-30 17:00

关注

这篇文章主要介绍了C++类的对象作类成员调用构造、析构函数及静态成员实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++类的对象作类成员调用构造、析构函数及静态成员实例分析文章都会有所收获,下面我们一起来看看吧。

类对象作为成员

C++类中的成员可以是另一个类的对象,我们称该成员为 对象成员

例如:

class Phone {}class Person{    Phone p;}

tips:当类中成员是其他类对象时,我们称该成员为 对象成员

Person类中有对象p作为成员,Phone为对象成员,那么当创建Person对象时,Phone与Person的构造和析构的顺序是谁先谁后?

那让我们在两个类中加上一些输出语句做提示就好了,可以清晰的看到构造和析构的顺序。

示例:

#include<iostream>using namespace std;//类对象作为类成员class Phone{public:Phone(string P_name){p_name = P_name;        cout<<"Phone类有参构造"<<endl;}    ~Phone(){cout << "Phone析构" << endl;}string p_name;};class Person{public:Person(string m_Name,string p_Name):m_name(m_Name),m_PName(p_Name) {        cout << "Person构造" << endl;}//初始化列表    ~Person(){cout << "Person析构" << endl;}string m_name;Phone m_PName;};void test01(){Person p1("张三", "华为nova7");Person p3(p1);//调用默认拷贝构造函数p3.m_name = "李白"; p3.m_PName.p_name = "iphone MAX";cout << p1.m_name << "拿着" << p1.m_PName.p_name << endl;cout << p3.m_name << "拿着" << p3.m_PName.p_name << endl;}int main(){test01();}

C++类的对象作类成员调用构造、析构函数及静态成员实例分析

从结果图中看出同时调用有参构造的时候,先调用对象成员的构造,再调用本类构造

析构的顺序相反

静态成员

定义和分类

静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员

静态成员分为:

静态成员变量

静态成员函数

静态成员变量

class Person{public:static int m_A; private:static int m_B; };int Person::m_A = 10;int Person::m_B = 10;void test01(){//静态成员变量两种访问方式//1、通过对象Person p1;p1.m_A = 100;cout << "p1.m_A = " << p1.m_A << endl;Person p2;p2.m_A = 200;cout << "p1.m_A = " << p1.m_A << endl; //共享同一份数据cout << "p2.m_A = " << p2.m_A << endl;//2、通过类名cout << "m_A = " << Person::m_A << endl;//cout << "m_B = " << Person::m_B << endl; //私有权限访问不到}int main() {test01();system("pause");return 0;}

静态成员变量也是有访问权限的,无论是public或者是private在类内都可以被访问,m_A和m_B在类内定义在类外初始化,还记得类外初始化吗,就是变量类型加类名加::变量名=值;同时可以通过对象和类名两种方式访问静态成员变量。

静态成员函数

class Person{public:int getB(){return m_B;}static int m_A;int m_C;//非静态成员变量//静态成员函数static void func(){m_A = 100;//m_C = 20;cout << "static void func 的调用" << endl;}private:static int m_B;static void func2(){cout << "static void func 的调用" << endl;}};int Person::m_A = 100;//类外外面初始化int Person::m_B = 200;void test03(){//调用方式有两种//1、通过对象调用Person p;p.func();//通过类名调用Person::func();//类外访问不到静态成员函数,静态成员函数也有访问权限}

静态成员函数也有权限的控制,代码里写了func是公共权限,func2是私有权限;静态成员函数也有对象调用和类名调用两种方式,但是都无法调用私有权限的静态成员函数。

注意事项:静态成员函数不可以访问非静态成员变量,无法区分到底是哪个对象的属性,只有公用的静态成员变量才可以被访问。

关于“C++类的对象作类成员调用构造、析构函数及静态成员实例分析”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C++类的对象作类成员调用构造、析构函数及静态成员实例分析”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯