
类的定义
- 类定义格式
- class 类的名字 { //类的成员 };
- 需注意类定义结束时后面的分号不能省略。
- 为了区分成员变量,一般习惯在变量前加一个特殊标识('_'等),但并非强制要求。
- C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是 struct中可以定义函数,⼀般情况下我们还是推荐⽤class定义类。
- 定义在类⾯的成员函数默认为inline。
例子:
class Stack
{
public:
//成员函数
int add(int x, int y)
{ return x + y;}
//...
private:
//成员变量
int _x;
int _y;
//...
}; //注意分号不可省略
2.访问限定符
- 用于限制类成员(数据成员和成员函数)在类外部的访问权限,这是实现封装性的关键。
- public(公有)修饰的成员在类外可以直接被访问;protected(保护)和private(私有)修饰的成员在类外不能直接被访问,protected和private是⼀样的。区别在于该类的派生类(子类)也可以访问protected成员。
- 访问权限作⽤域从该访问限定符出现的位置开始直到下⼀个访问限定符出现时为⽌,如果后⾯没有访问限定符,作⽤域就到类结束。
- class定义成员没有被访问限定符修饰时默认为private,struct默认为public。
实例化
-
如何在c++中创建(实例化)一个对象?
栈上创建 (静态创建)
- 语法:
类名 对象名(构造函数参数); - 示例:
Car myCar;或Car myCar("BMW", "Blue"); - 特点
- 内存分配和释放由编译器自动管理。当对象所在的作用域(如函数、代码块)结束时,对象会被自动销毁,其占用的栈内存被释放。
- 效率高,语法简单。
- 栈的大小有限,不适合创建过大的对象。
堆上创建 (动态创建)
-
语法:
类名 *对象指针 = new 类名(构造函数参数); -
示例:
Car* myCarPtr = new Car();或Car* myCarPtr = new Car("Audi", "Black"); -
特点
- 内存分配由程序员手动控制,使用
new关键字申请堆内存。 - 对象的生命周期由程序员管理,必须使用
delete关键字手动释放内存,否则会造成内存泄漏。 delete myCarPtr;// 释放对象本身- 可以创建非常大的对象,因为堆的大小通常远大于栈。
- 灵活性高,可以在运行时根据需要动态创建和销毁对象。
- 内存分配由程序员手动控制,使用
-
访问成员的方式
- 栈上对象:使用点运算符 (.)
myCar.start(); - 堆上对象(通过指针):使用箭头运算符 (->)
myCarPtr->start();或者(*myCarPtr).start();
- 栈上对象:使用点运算符 (.)
例子:
class Car { public: void addmyCar(char *name, char *color) { _name = name; _color = color; } private: char _name[20]; char _color[20]; }; int mian() { Car mycar1; Car *mycar2 = new Car(); mycar1.addmycar("BMW", "Blue"); mycar2.addmycar("Audi", "Black"); delete mycar2; return 0; } - 语法:
-
对象大小
- 对象中包含成员变量,但不包含成员函数。因为函数被编译后是一段指令,单独存储在一个单独的区域(代码段)。
- 对象中只存储成员变量,C++规定类实例化的对象也要符合内存对⻬的规则。
- 没有成员变量的对象大小为1个字节,是为了占位标识对象存在。
this指针
- 定义
this指针是一个隐含的、常量的指针,它存在于每一个非静态成员函数的内部。它指向当前正在调用该成员函数的对象。- 本质:
this指针的类型是类名 *const。这意味着:- 它是一个指针,指向一个类的实例。
- 它是
const的,你不能改变this指针本身的值,让它指向另一个对象。
- 本质:
- 作用
- 区分成员变量和局部变量
- 返回当前对象本身
- 在成员函数中访问当前对象的其他成员(一般出现在嵌套函数或者回调函数中)
例子:
class Car
{
public:
void addmyCar(char *name, char *color)
{
//区分成员变量和局部变量
this->_name = name;
this->_color = color;
}
//返回当前对象本身
char *Getname()
{return this->_name;}
private:
char _name[20];
char _color[20];
};
类的定义与实现的分离
在大型项目中,为了提高代码的可维护性和编译效率,通常将类的声明和成员函数的实现分离开。
- 头文件 (.h 或 .hpp):存放类的声明。
- 源文件 (.cpp):存放成员函数的实现。
- 源文件需要包含相对应的头文件。

被折叠的 条评论
为什么被折叠?



