首页 > 编程语言 >【C++】构造函数的深入学习

【C++】构造函数的深入学习

时间:2024-07-31 17:28:36浏览次数:11  
标签:初始化 访问 int C++ Person 深入 静态 class 构造函数

一、初始化列表

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

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

class People
{
public:

    //传统初始化操作
    Person(int a, int b, int c)
    {
        A = a;
        B = b;
        C = c;
    }

    //初始化列表初始化属性
    Person():A(10),B(20),C(30)
    {

    }

    //初始化列表可变值 
    Person(int a, int b, int c):A(a),B(b),C(c)
    {

    }

private:

    int A;
    int B;
    int C;    

}

void test()
{
    Person p(10,20,30);//传统方法
    Person p;//初始化列表初始化属性
    Person p(10,20,30);//初始化列表可变值 
}
二、类对象作为类成员
class A{}
class B
{
    A a;
}

先构造A再构造B,先析构B再析构A(先进后出LIFO)

三、静态成员变量

                         所有对象共享同一份数据 -- 你改了别人用的就是改过的数据

                         在编译阶段分配内存 -- 生成了exe程序,还没有双击运行之前已经分配在全局区中

                         类中声明,类外初始化 -- 必须要有一个初始值否则没法用

class Person
{
public:

    static int m_A;
}
//类外初始化
int Person::m_A = 100;

 静态成员变量不属于某一个对象上面,所有对象共享同一份数据,因此有两种访问方式:

1、通过对象访问 

Person P;
cout << P.m_A << endl;

2、通过类名访问

cout << Person::m_A << endl;

静态成员变量访问权限:在Private作用域下访问,出了这个类不可以访问

四、静态成员函数

                         所有对象共享同一个函数,类外访问不到私有静态函数

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

class Person
{
public:
    static void func()
    {
        m_A = 100;//静态成员函数可以访问静态成员变量
        cout << "static void func调用" << endl;
    }

    static int m_A;
};

int Person::m_A = 0; 

void test0()
{
    //通过对象访问
    Person P;
    P.func();

    //通过类名访问
    Person::func();
}

标签:初始化,访问,int,C++,Person,深入,静态,class,构造函数
From: https://blog.csdn.net/weixin_60546365/article/details/140480623

相关文章

  • 【C++】对象模型和this指针
    一、成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上①C++编译器会给每一个空对象分配一个字节的空间,为了区分空对象占内存的位置classPerson{}voidtest(){PersonP;//空类(类中什么也没有)中的空对象所占内存空间为1cout<<sizeof(P......
  • C++面向对象编程解析
    文章目录1.概述2.作用解析3.概念解析1.类和对象2.封装(Encapsulation)3.继承(Inheritance)4.多态(Polymorphism)1.概述C++是在C语言的基础上增加了面向对象编程(OOP)特性的编程语言。面向对象编程是一种编程范式,通过将程序组织成对象的集合,这些对象包含数据和行......
  • 关于使用C#注入C++的封装DLL后打印内容乱码
    最近因需要,用C++写了个钩子的DLL,一切工作测试通过后,放到C#里使用P/Invoke调用,发现部分乱码,最后反复测试,才发现一个问题,原来SetWindowsHookEx这个函数,也是分A版和W版,最后换了就正常了,附上对比。。乱码[DllImport("user32.dll",SetLastError=true]publicstaticex......
  • 搭建 STM32 网关服务器的全流程:集成嵌入式 C++、TCP/IP 通信、Flash 存储及 JWT 认证(
    引言随着物联网(IoT)技术的快速发展,基于STM32的服务器(类似网关)在数据采集、设备控制等方面的应用越来越广泛。本文将介绍搭建一个基于STM32的服务器所需的技术栈,以及详细的搭建步骤和代码示例。技术栈介绍在搭建基于STM32的服务器时,我们需要用到以下技术栈和组件:1.硬......
  • 【C++】auto
    1、概念auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。注意:使用auto变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此,auto并非是一种“类型”的声明,而是一个类型......
  • 三种语言实现二维差分(C++/Python/Java)
    题目输入一个n行m列的整数矩阵,再输入q个操作,每个操作包含五个整数x1,y1,x2,y2,c其中(x1,y1)和(x2,y2)表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上c。请你将进行完所有操作后的矩阵输出。输入格式第一行包含整数n,......
  • 碰撞检测 | 矩形增量膨胀安全走廊模型(附C++/Python仿真)
    目录0专栏介绍1安全走廊建模的动机2矩形增量膨胀算法3算法仿真3.1C++实现3.2Python实现0专栏介绍......
  • C++学习04day--引用
    案例代码:会发现最后程序执行完,打印X,最后还是100C++与C语言类似,C++中函数的参数是形式参数,即是实参的拷贝,所以修改的不是实参,所以X不改变,因此我们引入引用引用:即为某个已存在的变量名,引用变量与被引用变量公用一块内存空间,比如土豆和马铃薯都是同一种东西的不同命名。通过在......
  • 三种语言实现差分(C++/Python/Java)
    题目输入一个长度为n的整数序列。接下来输入m个操作,每个操作包含三个整数l,r,c表示将序列中[l,r]之间的每个数加上c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数序列。接下来m行,每行包含三个整数l,r,c,表......
  • 老旧 Linux 系统搭建现代 C++ 开发环境 —— 基于 neovim
    问题背景公司配发的电脑是macOS,日常开发需要访问Linux虚拟机,出于安全方面的考虑,只能通过跳板机登录。这阻止了大多数远程图形界面的使用,让写代码的工作变得复杂起来,市面上非常好用的VSCode都用不了。因此考虑基于vim搭建一套个人开发环境,需要支持以下特性:语法高亮(风格......