首页 > 编程语言 >C++第十一次课笔记——初始化列表算法、对象成员、静态成员

C++第十一次课笔记——初始化列表算法、对象成员、静态成员

时间:2024-07-27 19:54:13浏览次数:12  
标签:初始化 第十一次 成员 C++ Person int 对象 静态

一、初始化列表

作用:C++提供初始化列表语法,用来初始化属性
语法: 构造函数():属性1(值1), 属性2(值2), …{ }

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) {

	}
	int m_A;
	int m_B;
	int m_C;
};
void test01() {
	Person p(10, 20, 30);
	cout << p.m_A << endl;
	cout << p.m_B << endl; 
	cout << p.m_C << endl;
}

二、类对象作为类成员

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

class A {}
class B{
	A a;
}

B类中有对象A作为成员,A为对象成员
那么创建B对象时,A与B的构造与析构的顺序是谁先谁后?

//手机 类
class Phone {
public:
	Phone(string pName) {
		m_PName = pName;
		cout << "Phone的构造函数调用" << endl;
	}
	~Phone()
	{
		cout << "Phone的析构函数调用" << endl;
	}
	string m_PName;

};
//人 类
class Person {
public:
	Person(string name, string pName) :m_Name(name),m_Phone(pName){//初始化列表语法
		cout << "person的构造函数调用" << endl;
	}
	~Person() {
		cout << "person的析构函数调用" << endl;
	}
	//姓名
	string m_Name;
	//手机
	Phone m_Phone;
};
void test01() {
	Person p("张三", "苹果");
}

结果是:

Phone的构造函数调用
person的构造函数调用
person的析构函数调用
Phone的析构函数调用

结论: 当其他类对象作为本类对象,构造时候先构造类对象,再构造自身,析构的顺序与构造相反

静态成员

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

  • 静态成员变量
    1、所有对象共享同一份数据
    2、在编译阶段分配内存
    3、类内声明,类外初始化
  • 静态成员函数
    1、所有对象共享同一个函数
    2、静态成员函数只能访问静态成员变量

静态成员变量:

//静态成员变量
class Person {
public:
	//1、所有对象都共享同一份数据
	//2、编译阶段就分配内存
	//3、类内声明,类外初始化操作
	static int m_A;
};

int Person::m_A = 100;//类外初始化操作

void test01() {
	Person p;
	cout << p.m_A << endl; //输出100

	Person p2;
	p.m_A = 200; 
	cout << p2.m_A << endl; //输出200
}
//静态成员变量
class Person {
public:
	//1、所有对象都共享同一份数据
	//2、编译阶段就分配内存
	//3、类内声明,类外初始化操作
	static int m_A;
	//静态成员变量也有访问权限
private:
	static int m_B;
};

int Person::m_A = 100;//类外初始化操作
int Person::m_B;
void test02() {
	//静态成员变量 不属于某个对象,所有对象都共享同一份数据
	//两种访问:
	//1、通过对象进行访问
	Person p;
	cout << p.m_A << endl; 

	//2、通过类名来访问
	cout << Person::m_A << endl;

	//cout << Person::m_B << endl;//私有权限访问不了

}	

静态成员函数:

class Person {
public:
	//静态成员函数
	static void func() {
		m_A = 100;//2、静态成员函数可以访问静态成员变量
		//m_B = 200;//报错,因为,静态成员函数不可以访问非静态成员
		cout << "static void func调用" << endl;

	}
	static int m_A;//静态成员变量
	int m_B;//非静态成员变量
	
	//静态成员函数也是有访问权限的
};
int Person::m_A = 0;

//静态成员函数的两种访问方式://所有对象共享同一个函数
void test01() {
	//1、通过对象访问
	Person p;
	p.func();
	//2、通过类名访问
	Person::func();
}

标签:初始化,第十一次,成员,C++,Person,int,对象,静态
From: https://blog.csdn.net/LqianH6/article/details/140737655

相关文章

  • C++ 虚拟加载程序
    哦!J B K!我来啦!!!目录代码效果总代码  新知识生化危机  结尾代码上代码!(上次是这样吗?)voidHideCursor()//影藏光标{ CONSOLE_CURSOR_INFOcursor_info={1,0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);}还有!!! —————......
  • c++11 新特性 超级详细
    目录C++auto类型推导完全攻略auto类型推导的语法和规则auto的限制auto的应用使用auto定义迭代器auto用于泛型编程C++decltype类型推导完全攻略decltype推导规则decltype的实际应用汇总auto和decltype的区别语法格式的区别对cv限定符的处理对引用的处......
  • C++输入输出流
    目录入门     C++cout.put():输出单个字符C++cout.write():输出字符串C++cout.tellp()和cout.seekp()方法详解 C++tellp()成员方法C++seekp()成员方法 C++cout格式化输出(超级详细)C++cout成员方法格式化输出使用流操纵算子格式化输出C++怎样对输入输出......
  • C++ 红黑树
    1. 红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。红黑树的性质......
  • c++ typedef 关键字详解
    在C++中,typedef关键字用于为已有的数据类型创建一个新的别名。这使得代码更加易读和维护,尤其是当使用复杂的类型定义时。typedef可以用来简化代码或使其更具描述性。基本语法typedefexisting_typenew_name;这里,existing_type是已有的类型,new_name是你为它创建......
  • 【操作系统/C++ malloc 1KB和1MB 有什么区别?brk | mmap】
    关于malloc如何根据请求的内存大小选择使用brk还是mmap的机制,是glibc(GNUCLibrary)中malloc实现的一个常见策略,尽管具体的阈值(如128KB)可能会因glibc的不同版本或配置而有所不同。brkbrk是一个系统调用,用于改变数据段的结束地址(即“程序断点”)。在UNIX和类U......
  • 【C++深度探索】AVL树与红黑树的原理与特性
    ......
  • C++多线程基本使用方式
    一、线程创建        创建线程的函数  thread t(函数名f,函数f的参数) 或者 用lambda表达式代码:#include<iostream>#include<thread>#include<vector>usingnamespacestd;voidoutput(stringinput,inta){ cout<<input<<endl; cout<<a......
  • Dynamsoft Barcode Reader SDK C++ 10.4.10 Crack-24.7.22
    DynamsoftBarcodeReaderDocumentationforC++EditionDynamsoftBarcodeReader(DBR)SDKC++EditionisabarcodereadingtooldesignedspecificallyforC++developers.LeveragingtheefficiencyandflexibilityoftheC++language,DBRC++Editionprovid......
  • 【C++初阶】vector
    【C++初阶】vector......