C++ 的类&对象
C++在C语言的基础上增加了面对对象的编程,C++支持面向对象程序设计;
类是C++的核心特性,用于指定对象的形式,类中的数据和方法称为类的成员。
1. C++类的定义
类定义是以关键字class开头,后跟类的名称,类的主体在花括号里
2. 成员函数的定义
成员函数的声明要写在类中,声明函数的参数表和返回值类型,而函数的具体实现是写在类定义之外的,同时定义成员函数需要指定类的名称
class baseClass{ public: int geta(); private: int a = 1; };
// 返回值类型 类的名称 :: 函数名(参数表) int baseClass :: geta(){ return a; }
如果成员函数需要被频繁调动,且代码比较简单,可以将成员函数定义为内联函数(inline function),这样做的好处是可以消除函数调用时的时间开销;
内联函数的函数声明关键字为 inline,在类内定义的函数被默认为内联函数,但是函数声明为内联,仅仅是对编译器的定义,如果函数比较复杂,编译器会将其看作普通函数;
内联函数一般要求如下:
- 函数简短,一般为3 - 5 行
- 函数内没有复杂的实现,比如while、for、递归等
- 通常会频繁调用
内联函数的声明方式有两种,显式声明和隐式声明,将函数体直接放在类中就是隐式声明,在类外在函数返回值前加上inline进行定义就是显式声明
class baseClass{ public:
// 隐式声明 void show(){ cout << "show something"; } }; // 也可将函数体写在类外,显式声明,函数更整洁 inline void baseClass::show(){ cout << "show something"; }
3. 类成员的访问
数据封装是面向对象编程的一个重要特点,它防止函数直接访问类的内部成员,类的访问修饰符有public、private、protected三种,
一个类可以有多个相同的类访问修饰符,成员和类的默认访问修饰符为private
class classname{ public: // 公有成员 protected: // 受保护成员 private: // 私有成员 };
- 公有成员public:在类的外部可以直接访问,不需要使用任何成员函数来设置或者获取共有变量的值
- 私有成员pravite:私有成员变量或函数在类的外部是不可访问的,甚至不可查看,只有类本身和友元函数可以访问私有成员
- 受保护成员protected:受保护成员变量或函数与私有成员相似,但受保护成员在子类中是可以访问的
#include<iostream> using spacename std; class baseClass { // 公有成员 public: string pub = "public"; char getc(); // 私有成员,只能通过类内的函数进行访问 private: string pri = "private"; // 受保护成员,在子类中可以访问 protected: string pro = "protected"; }; // 继承base类的子类,继承用 : class sonClass : baseClass { public: char getPro(); // 先声明,再在外部定义,比较规范 }; char baseClass :: getc() { return getPro[3]; } char sonClass :: getPro() { return pri[3]; } int main(){ baseClass bc; sonClass sc; cout << bc.pub << endl; // 输出为 public cout << bc.getc()<<endl; // 输出为 v cout << sc.getPro(); // 输出为t return -1; }
4. C++中类的继承
有public、protected、private三种继承方式,不同在于改变了基类成员的访问属性
- public继承:基类中的public、protected、private成员访问属性在派生类别中分别变成public、protected、private
- protected继承:基类中的public、protected、private成员访问属性在派生类别中分别变成protected、protected、private
- private继承:基类中的public、protected、private成员访问属性在派生类别中分别变成private、private、private
C++中类的继承默认为private继承,struct中默认为public继承
5. 类的构造函数 & 析构函数
构造函数是类的一种特殊的成员函数,会在每次创建类的时候自动执行,其名称与类的名称完全相同,且不会返回任何类型,构造函数可以为某些成员变量进行初始值设置。
构造函数一般声明为公有的public,因为创建对象一般是在类的外部进行的;如果声明为private或protected,那么只能在类内部进行实例化,不是通常做法。
class baseClass{ public: baseClass(int aa, double bb); // 构造函数的函数名与类的名称相同 int geta(); private: int a; double b; }
// 构造函数无返回值,故不需要关键字 baseClass::baseClass(int aa, double bb){ a = aa; b = bb; } int baseClass::geta(){ return a; } int main(){ baseClass myclass(1, 2.2); cout << myclass.geta(); // 返回的是1 return 0; }
还可以使用初始化列表来初始化字段
baseClass::baseClass(int aa, double bb): a(aa), b(bb) { .... } // 上述方法等同于 baseClass::baseClass(int aa, double bb) { a = aa; b = bb; }
析构函数是类的一种特殊成员函数,会在每次删除所创建的对象时执行;
析构函数的名称为 ~ + 类的名称,不会返回任何值,也不带任何参数,析构函数有助于在跳出程序(关闭文件、释放内存等)前释放资源。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」