【复习】C++之static成员

当类中只有一个int成员时,这个类的大小为4,。

但是类中只有一个静态int成员时,这个类的大小为1。

#include<iostream>
using namespace std;

class CPerson  //只有一个int成员时
{
public:
	int num;
};


int main()
{
	cout << sizeof(CPerson) << endl;

	system("pause");
	return 0;
}

#include<iostream>
using namespace std;

class CPerson  //只有一个static成员时
{
public:
	static int num;  
};

int main()
{
	cout << sizeof(CPerson) << endl;

	system("pause");
	return 0;
}

#include<iostream>
using namespace std;

class CPerson  //只有一个static成员时
{
public:
	static int num;  //编译期存在
};

int CPerson::num = 100; //static成员变量需要在类外初始化

int main()
{
	cout << CPerson::num << endl;

    CPerson ps;
    cout << ps.num << endl;    

	system("pause");
	return 0;
}

static变量只有一个,意思是所有的对象共享一个。

#include<iostream>
using namespace std;

class CPerson  //只有一个static成员时
{
public:
	static int num;  //编译期存在
};

int CPerson::num = 100; //static成员变量需要在,类外初始化

int main()
{
	cout << CPerson::num << endl;

    CPerson ps;
	ps.num = 123;

	CPerson ps1;
    cout << ps1.num << endl;    

	system("pause");
	return 0;
}

static函数中不能使用非static函数成员。

因为static函数里面没有this指针。

我们可以使用static变量的特性,统计创建的对象个数。

#include<iostream>
using namespace std;

class CPerson  //只有一个static成员时
{
private:
	static int nCount;
public:
	CPerson()
	{
		nCount++;
	}
	static int GetCount()
	{
		return nCount;
	}
};
int CPerson::nCount = 0;

int main()
{
	cout << CPerson::GetCount() << endl; 

	CPerson ps1;
	CPerson ps2;
	{
		CPerson ps3;
	}

	cout << CPerson::GetCount() << endl;

	system("pause");
	return 0;
}

<think>嗯,用户让我介绍一下C++复习的内容,或者回答他们的问题。首先,我需要确定他们的需求是什么。可能是一个正在准备考试或者面试的学生,需要系统地复习C++的关键知识点。我要确保覆盖C++的基础和高级主题,同时结构清晰,帮助他们逐步理解和记忆。 首先,我得回忆C++的主要知识点,包括基础语法、面向对象、内存管理、模板、STL、新特性等等。用户可能需要一个全面的复习指南,所以应该分模块来介绍,每个模块下再详细列出重点内容。 接下来要考虑用户的水平。如果是初学者,可能需要更详细的解释;如果是进阶学习者,可能需要重点和难点的强调。但用户的问题比较广泛,所以保持适中,既覆盖基础又不遗漏高级主题。 然后,系统级指令要求数学公式用$...$,独立公式用$$...$$,但C++复习可能涉及代码示例,数学公式可能不多。不过如果有算法复杂度分析,比如大O符号,可能需要用数学格式。例如,时间复杂度$O(n)$。 另外,必须使用中文回答,结构清晰,分步骤解决问题。所以应该用标题和子标题来组织内容,每个部分用编号或项目符号列出重点。 可能需要注意的常见问题:指针和引用的区别、虚函数表、智能指针的使用、移动语义等。这些都是面试中常问的问题,复习时应重点强调。 还要考虑C++11到C++20的新特性,比如auto、lambda、右值引用、concepts等,这些是现代C++的重要部分,不能遗漏。 需要提醒用户实践的重要性,比如通过LeetCode练习、手写数据结构、项目实践等。同时,注意易错点,比如内存泄漏、未定义行为、多线程问题。 最后,参考书籍推荐,如《C++ Primer》《Effective C++》等,帮助用户进一步学习。 检查是否遵循了系统指令:数学公式是否正确,独立公式是否单独成段,LaTeX语法正确,结构是否清晰,分模块逐步讲解。确保没有使用Markdown格式,用纯文本的编号和缩进。 可能还需要举一些代码示例,但用户没有特别要求,所以简要提及即可,比如在讲解RAII时提到智能指针的用法。 总结下来,应该按照基础语法、面向对象、内存管理、模板与STL、新特性、多线程、复习建议的结构来组织内容,每个部分列出关键点和注意事项,最后提供参考资料和练习建议。</think>以下为C++系统性复习框架及关键知识点梳理(建议结合实践巩固): ===== 一、基础语法核心 ===== 1. 数据类型与运算 - 基本类型:`int/double/char`等的大小与范围 - 复合类型:数组/结构体/联合体 - 类型转换:隐式转换规则、`static_cast/dynamic_cast`等 2. 流程控制 - 循环:`for (auto& item : container)`范围for循环 - 异常处理:`try-catch`块与异常安全 3. 函数机制 - 函数重载决议规则 - 参数传递:值/引用/指针的区别,右值引用`&&` - `constexpr`函数编译时计算 ===== 二、面向对象编程 ===== 1. 类设计三要素 - 封装:访问控制`public/protected/private` - 继承:派生类内存布局,虚继承解决菱形问题 - 多态:虚函数表(vtable)工作原理,`override/final`关键字 2. 特殊成员函数 - 构造/析构函数调用链 - 移动构造/赋值:`std::move`实现资源转移 - 示例:`BigFive`规则(构造、拷贝、移动、析构、operator=) ===== 三、内存管理精要 ===== 1. 手动管理 - `new/delete`与`malloc/free`对比 - 深浅拷贝问题及解决方案 2. 智能指针(C++11+) - `unique_ptr`独占所有权 - `shared_ptr`引用计数,循环引用问题 - `weak_ptr`打破循环引用 ===== 四、模板与STL ===== 1. 泛型编程 - 函数模板特化与偏特化 - 可变参数模板`template<typename... Args>` 2. 标准库组件 - 容器:`vector/map/unordered_map`时间复杂度对比 - 算法:`sort`自定义比较函数,`lambda`表达式应用 - 迭代器:五种分类及使用场景 ===== 五、现代C++特性(C++11/14/17/20)===== 1. 关键新增语法 - `auto`类型推导规则 - `constexpr if`编译期分支 - 结构化绑定`auto [x,y] = pair` 2. 并发支持 - `std::thread`基础线程管理 - `std::async`异步任务 - 原子操作`atomic`与内存模型 ===== 复习策略建议 ===== 1. 实践路径 - 刷题平台:LeetCode分类练习(链表、树、设计模式) - 手写实现:智能指针、vector容器简化版 - 项目实践:网络库/简单编译器等系统性项目 2. 重点难点 - 对象生命周期管理(RAII原则) - 模板元编程基础应用 - 多线程同步机制(mutex/condition_variable) 3. 经典易错点 - 悬空指针/迭代器失效 - 未定义行为(UB):越界访问、类型双关 - 异常安全保证级别 参考书籍: - 基础:《C++ Primer》《Accelerated C++》 - 进阶:《Effective C++》《深入理解C++对象模型》 - 标准库:《C++标准库》 注:建议通过编写测试代码验证理论理解,例如通过`sizeof`验证类内存布局,使用Valgrind检测内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值