初始化列表||类对象作为类成员|| 静态成员
初始化列表
作用:
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;
}
初始化列表||类对象作为类成员|| 静态成员相关推荐
- c/c++教程 - 2.4.2.7~8 类对象作为类成员,static静态成员变量函数
目录 4.2.7 类对象作为类成员 4.2.8 静态成员 相关教程 4.2.7 类对象作为类成员 C++类中的成员可以是另一个类的对象,我们称该成员为 对象成员. 例如: class A {} cla ...
- C++ 类对象作为类成员
C++ 类对象作为类成员 对象成员:C++类中的成员可以是另一个类的对象 示例 对象成员:C++类中的成员可以是另一个类的对象 例如: class A {} class B {A a: } B类中有对 ...
- C++类对象作为类成员
C++类中的成员可以是另一个类的对象,我们称该成员为对象成员 代码如下: #include <iostream> using namespace std; #include <cst ...
- 【转载】c++之类的基本操作(c++ primer 的读书笔记 ,类对象, 类用户, 类成员的含义)
一前言 看c++ primer有一个地方看的云里雾里的,这么一段话 可以认为 protected 访问标号是 private 和 public 的混合: • 像 private 成员一样,protec ...
- 22.类对象和类指针
Student a; s.setName("A");//Studeng *b = new Student();Student *b;b = new Student();b-> ...
- 类对象和类指针深入分析与对比
1.前言 Student a; s.setName("A");//Studeng *b = new Student(); Student *b; b = new Student() ...
- C++类对象和类指针的区别
好奇这个,所以参考了一些帖子,写下心得. 一篇转载率较高的帖子:C++ 类对象和 指针的区别 大佬都不贴结果....所以这里我给出代码和结果: #include<iostream> usi ...
- c++类对象公有数据成员访问
#include<iostream> using namespace std; class CDate {public:int Date_Year;int Date_Month;int D ...
- c++全局类对象_C++ 类在内存中的存储方式(一)
说了这么久的 C++ 终于说到类了,还是从内存出发来讨论一下 C++ 的类在内存中的存储方式(之前写过一篇内存对齐的文章,类同样在一定程度上遵循内存对齐原则,不过比结构体复杂一下) 如有侵权,请联系 ...
最新文章
- Django后端彻底解决跨域问题
- Dynpro F4的实现测试
- Python模块进阶、标准库、扩展库
- Redis学习之集群(五)
- 【matlab-7】Matlab与线性代数(三)
- navicat如何连接腾讯mysql_使用Navicat连接腾讯云Mysql数据库
- Unity Editor下改变场景里prefab的参数后保存时注意点
- Python写数据结构:双向循环链表
- 计算机系统组成思维导图
- 理解Kademlia协议原理
- RandLA-Net Pytorch版本: module not found error: no module named ‘torch_points_ kernels. points_ cpu‘
- jvm 性能调优之 jmap
- MyEclipse使用教程——使用DevStyle Icon Designer(二)
- Proxifier代理指定程序到fiddler
- 微软上海,招 Partner 软件开发经理!
- 互斥锁的概念和使用方法。
- 实现字符和Unicode码互换 (Java经典编程案例)
- 数据标准是什么?企业如何做好数据管理?
- 英国宣判维基解密创始人阿桑奇因违反保释条例判刑入狱将近一年
- Visual Studio 找不到一个或多个组件,请重新安装该应用程序