C++ 类相关语法

本文详细介绍了C++中的类相关语法,包括类成员、作用域修饰符、构造函数和析构函数、继承等内容。重点讲解了构造函数的重载、初始化列表、委托构造函数、深拷贝与浅拷贝的概念,以及移动构造函数的作用。同时强调了在处理包含原始指针的类时,应避免浅拷贝并正确处理静态成员和继承中的构造顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Class member

类相关构成

  • Attributes
  • Functions
    • Constructors
    • Copy constructors
    • Move constructors
    • Destructors

作用域修饰符

  • public
  • private(default)
  • protected
    • 可以供继承对象使用

Constructors & Destructors

constructors 可以被复写(overload)

class Player{
private:
	int name;
	int xp;
public:
	Player(); // Constructors
	Player(string, int); // Overload Constructors
	~Player(); // Destructors
};

constructors initialization list
当我们在constructors中初始化成员变量时候,可以使用initialization list,方便我们对成员变量初始化

class Player{
private:
	int name;
	int xp;
public:
	Player(int xp_val, string name_val)
		: name {name_val}, xp {xp_val}{
	}

delegating constructors
在初始化列表中,我们可以调用constructors来完成相关的初始化任务。比如overload constructors 时候,我们可以借助delegating constructors, 这样可以帮助很大程度上避免重复代码

class Player{
private:
	int name;
	int xp;
public:
	Player(){}
	Player(int name)
		:name{name}{}
	//Delegating constructors
	Player(int name, int xp)
		:Player(name), xp{xp}{}
	

copy constructors
compiler 会自动为类添加copy constructor
请为每个类都添加copy constructor, 并且copy constructor的参数请使用 const reference, 避免reference object被修改
使用raw pointer member(在类中开辟heap上的memory), 会让复制比较混乱,请避免使用

Type::Type(const Type &source){
} //copy constructor的模板

shallow Copy vs deep copy
浅拷贝是指不创建新的对象,只是申明一个新的对象,指向源对象
深拷贝是重新创建新的对象,拷贝的相关的值
如果类成员是raw pointer,请使用深拷贝,浅拷贝将会产生很大问题

move constructor
用来move一个object,而不是copy,因为如果object是深拷贝,将会产生很多性能问题
R-value reference operator(&&)

Type::Type(Type &&source);
Move::Move(Move &&source)
	: data{source.data}{
	source.data = nullptr
}
//声明move constructor 的方式, 可以使用initialization list,但要记得null out source 中的raw pointer

raw pointer -> 深拷贝 -> move constructor

const object
const object 只能调用object中被指定为const的函数

static class member
类中static member是属于类的,而不属于类实例

Inheritance

Access Specifier in class inheritance
access specifier will specify the access level of attribute of parent class
会将来自父类的属性都限定在同样的访问范围内

继承中的constructor执行顺序
先执行父类的constructor再执行子类的constructor
如果你不指定父类的constructor去执行,父类将执行default constructor(no args constructor)

继承中destructor的执行顺序
先执行子类的destructor再执行父类的destructor,destructor只释放在本类中new的heap空间

子类无法继承父类

  1. 父类的constructor和destructor(using Type::Type来继承父类的constructor,但也只是初始化父类中的属性,并且无需再将父类的constructor执行一遍,理念便是父类的constructor必须执行,这样is-a的关系才能够成立)
  2. 父类的overloaded assignment operators(可以继承其他的operators)
  3. 父类的friend function
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值