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;
}
复制代码

析构函数是类的一种特殊成员函数,会在每次删除所创建的对象时执行;

析构函数的名称为 ~ + 类的名称,不会返回任何值,也不带任何参数,析构函数有助于在跳出程序(关闭文件、释放内存等)前释放资源。

 

posted @   Liang-ml  阅读(155)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示