初始化列表

作用:

C++提供了初始化列表语法,用来初始化属性

语法:构造函数():属性1(值1),属性2(值2)... {}

#include <iostream>
using namespace std;
class Person {
public:传统方式初始化//Person(int a, int b, int c) {// m_A = a;// m_B = b;// m_C = c;//}//初始化列表方式初始化Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}void PrintPerson() {cout << "mA:" << m_A << endl;cout << "mB:" << m_B << endl;cout << "mC:" << m_C << endl;}
private:int m_A;int m_B;int m_C;
};int main() {Person p(1, 2, 3);p.PrintPerson();system("pause");return 0;
}



类对象作为类成员

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

B类中有对象A作为成员,A为对象成员

那么当创建B对象时,A与B的构造和析构的顺序是谁先谁后?

#include <iostream>
using namespace std;
#include <string>
class Phone
{
public:Phone(string name){m_PhoneName = name;cout << "Phone构造" << endl;}~Phone(){cout << "Phone析构" << endl;}string m_PhoneName;
};class Person
{
public://初始化列表可以告诉编译器调用哪一个构造函数Person(string name, string pName) :m_Name(name), m_Phone(pName){cout << "Person构造" << endl;}~Person(){cout << "Person析构" << endl;}void playGame(){cout << m_Name << " 使用" << m_Phone.m_PhoneName << " 牌手机! " << endl;}string m_Name;Phone m_Phone;};
void test01()
{//当类中成员是其他类对象时,我们称该成员为 对象成员//构造的顺序是 :先调用对象成员的构造,再调用本类构造//析构顺序与构造相反Person p("张三" , "苹果X");p.playGame();}int main() {test01();system("pause");return 0;
}



静态成员

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

静态成员分为:

  • 静态成员变量

    • 所有对象共享同一份数据

    • 在编译阶段分配内存

    • 类内声明,类外初始化

  • 静态成员函数

    • 所有对象共享同一个函数

    • 静态成员函数只能访问静态成员变量

#include <iostream>
using namespace std;
#include <string>
class Person
{
public:static int m_A; //静态成员变量//静态成员变量特点://1 在编译阶段分配内存//2 类内声明,类外初始化//3 所有对象共享同一份数据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;
}


#include <iostream>
using namespace std;
#include <string>
class Person
{public://静态成员函数特点://1 程序共享一个函数//2 静态成员函数只能访问静态成员变量static void func(){cout << "func调用" << endl;m_A = 100;//m_B = 100; //错误,不可以访问非静态成员变量}static int m_A; //静态成员变量int m_B; //
private://静态成员函数也是有访问权限的static void func2(){cout << "func2调用" << endl;}
};
int Person::m_A = 10;void test01()
{//静态成员变量两种访问方式//1、通过对象Person p1;p1.func();//2、通过类名Person::func();//Person::func2(); //私有权限访问不到
}int main() {test01();system("pause");return 0;
}

初始化列表||类对象作为类成员|| 静态成员相关推荐

  1. c/c++教程 - 2.4.2.7~8 类对象作为类成员,static静态成员变量函数

    目录 4.2.7 类对象作为类成员 4.2.8 静态成员 相关教程 4.2.7 类对象作为类成员 C++类中的成员可以是另一个类的对象,我们称该成员为 对象成员. 例如: class A {} cla ...

  2. C++ 类对象作为类成员

    C++ 类对象作为类成员 对象成员:C++类中的成员可以是另一个类的对象 示例 对象成员:C++类中的成员可以是另一个类的对象 例如: class A {} class B {A a: } B类中有对 ...

  3. C++类对象作为类成员

    C++类中的成员可以是另一个类的对象,我们称该成员为对象成员 代码如下: #include <iostream> using namespace std; #include <cst ...

  4. 【转载】c++之类的基本操作(c++ primer 的读书笔记 ,类对象, 类用户, 类成员的含义)

    一前言 看c++ primer有一个地方看的云里雾里的,这么一段话 可以认为 protected 访问标号是 private 和 public 的混合: • 像 private 成员一样,protec ...

  5. 22.类对象和类指针

    Student a; s.setName("A");//Studeng *b = new Student();Student *b;b = new Student();b-> ...

  6. 类对象和类指针深入分析与对比

    1.前言 Student a; s.setName("A");//Studeng *b = new Student(); Student *b; b = new Student() ...

  7. C++类对象和类指针的区别

    好奇这个,所以参考了一些帖子,写下心得. 一篇转载率较高的帖子:C++ 类对象和 指针的区别 大佬都不贴结果....所以这里我给出代码和结果: #include<iostream> usi ...

  8. c++类对象公有数据成员访问

    #include<iostream> using namespace std; class CDate {public:int Date_Year;int Date_Month;int D ...

  9. c++全局类对象_C++ 类在内存中的存储方式(一)

    说了这么久的 C++ 终于说到类了,还是从内存出发来讨论一下 C++ 的类在内存中的存储方式(之前写过一篇内存对齐的文章,类同样在一定程度上遵循内存对齐原则,不过比结构体复杂一下) 如有侵权,请联系 ...

最新文章

  1. Django后端彻底解决跨域问题
  2. Dynpro F4的实现测试
  3. Python模块进阶、标准库、扩展库
  4. Redis学习之集群(五)
  5. 【matlab-7】Matlab与线性代数(三)
  6. navicat如何连接腾讯mysql_使用Navicat连接腾讯云Mysql数据库
  7. Unity Editor下改变场景里prefab的参数后保存时注意点
  8. Python写数据结构:双向循环链表
  9. 计算机系统组成思维导图
  10. 理解Kademlia协议原理
  11. RandLA-Net Pytorch版本: module not found error: no module named ‘torch_points_ kernels. points_ cpu‘
  12. jvm 性能调优之 jmap
  13. MyEclipse使用教程——使用DevStyle Icon Designer(二)
  14. Proxifier代理指定程序到fiddler
  15. 微软上海,招 Partner 软件开发经理!
  16. 互斥锁的概念和使用方法。
  17. 实现字符和Unicode码互换 (Java经典编程案例)
  18. 数据标准是什么?企业如何做好数据管理?
  19. 英国宣判维基解密创始人阿桑奇因违反保释条例判刑入狱将近一年
  20. Visual Studio 找不到一个或多个组件,请重新安装该应用程序

热门文章

  1. ORACEL游标的使用实例
  2. 利用python把图片转换成代码
  3. iOS OC部分 NSString
  4. 将json的时间格式转换成正常的时间格式
  5. C#调试中,在VS的输出窗口或即时窗口显示消息
  6. MySQL配置文件my.cnf中文版
  7. 服务机器人---建图工具
  8. WINCE6.0添加特定的软件键盘
  9. android四大组件五大存储六大布局,物联网研报:物联网进入规模化应用时代
  10. linux命令dmesg查看进程被杀死原因