C++类与对象

简介: C++类与对象

     🎃hello,大家好,今天让我带你给大家学习C++课程的第二章《类与对象》,好了,废话不多说,让我们开始今天的内容。


❄️面向对象程序设计思想:

       1.封装

       2.继承

       3.多态


❄️初始类和对象:

🔎类的定义:

       类是对象的的抽象,是一种自定义的数据类型。类的定义格式如下:

class 类名
{
权限控制符;
    成员;
};

       1)class是定义类的关键字。


       2)类名是类的标识符,其命名遵循标识符的命名规范。


       3)声明成员时,通常需要使用权限控制符限制成员的访问规则,包括public,protected,private,这三种权限控制符的权限依次递减。


       4)大括号后面的一个分号“:",用于类定义的结束。


🔎类的实现:

       类的实现格式如下:

返回值类型 类名::函数名称(参数列表)
{
    函数体
}


🔎对象的创建与使用:

       对象的定义格式如下:

类名 对象名;

         对象的成员变量和成员函数的访问可以通过”.“运算符实现,其格式如下:

对象名.成员变量
对象名.成员函数

❄️封装:

       C++的封装是通过类实现的,通过类把具体的事物抽象为一个属性和行为结合的独立单位,类的对象会表现出具体的属性和行为。


❄️this指针

       this指针是C++实现封装的一种机制,他将对象和对象调用的非静态成员函数联系到一起,从外部看,每一个对象都拥有自己的成员函数。


 ❄️构造函数:

       构造函数是类的特殊成员函数,用于初始化对象。

🔎自定义构造函数:

class 类名
{
权限控制符;
    构造函数名(参数列表)
    {
        函数体
    }
}

       1)构造函数名必须与类名相同。

       2)构造函数名的前面不需要设定返回值类型。

       3)构造函数无返回值,不能用return返回

       4)构造函数的成员权限控制符一般设置为public。


🔎重载构造函数:

       在C++中,构造函数允许重载。

🔎含有成员对象的类的构造函数:

       C++允许将一个对象作为另外一个类的成员函数,即类中的成员变量可以作为其他类的对象。

含有成员对象的类的定义格式如下:

class B
{
    A a;//对象a作为类B的成员变量
    ...//其他成员
}

如果类A构造函数有参数,其参数要从类B的构造函数中传入,必须以” : “运算符初始化类A的对象。

❄️析构函数:

       析构函数的定义如下:

class 类名
{
    ~析构函数名称();
    ...//其他成员
}

      1)析构函数的名称与类名相同,在析构函数的前面要加”~“符号。


       2)析构函数没有参数。因为没有参数,所以析构函数不能重载,一个类里面只有一个析构函数。


       3)析构函数没有返回值,不能在在析构函数前面加任何的返回值类型。


注意:析构函数的调用顺序与构造函数的调用顺序是相反的。在析构对象和构造对象时,C++遵循的是先构造的后析构,后构造的先析构。


❄️拷贝构造函数:

       拷贝构造函数的定义:

class 类名
{
public:
    构造函数名称(const 类名& 对象名)
    {
        函数体
    }
    ...//其他成员
}

浅拷贝:

为指针成员home分配空间,将形参home的内容复制到_home指向空间里。

int len = string(home)+1;
_home = new char[len];
memset(_home,0,len);
strcpy(_home,home);

深拷贝:

int len = strlen(another._home)+1;
_home=new cahr[len];
strcpy(_home,another._home);


❄️关键字修饰类的成员:

       🔎const修饰类的成员:

       在类中,const即可以修饰类的成员变量,也可以修饰类的成员函数。

       const修饰成员变量:

       使用const修饰的成员变量成为常成员变量。

       const修饰成员函数:

       使用const修饰的成员函数称为常成员函数。格式如下:

返回值类型 函数名() const;

       在常成员函数内部,只能访问类的成员变量,而不能修改类的成员变量;并且,常成员函数函数只能调用类的常成员函数,不能调用类的非成员函数。


❄️友元:


🔎友元函数:

普通函数作为友元函数:

class 类名
{
    friend 函数返回值 友元函数名(形参列表);
    ...//其他成员
}

其他类的成员函数作为友元函数:

class B;//声明类B
class A
{
 public:
    int func();
};
class B
{
    friend int A::func();
}


🔎友元类:

class B;
class A
{
};
class B
{
    frined class A;
}


提醒:

1)友元声明位置由程序设计者决定,且不受权限控制符的影响

2)友元关系是单向的。

3)友元关系不具有传递性。

4)友元关系不可继承。


       🎃以上是本期的所有内容了,请大佬多多在评论区指正!

       🌞我是IT闫,期待你的关注!!!❤️

目录
相关文章
|
3天前
|
测试技术 C++
C++|运算符重载(3)|日期类的计算
C++|运算符重载(3)|日期类的计算
|
4天前
|
C语言 C++ 容器
C++ string类
C++ string类
9 0
|
4天前
|
C++ Linux
|
4天前
|
编译器 C++
【C++】继续学习 string类 吧
首先不得不说的是由于历史原因,string的接口多达130多个,简直冗杂… 所以学习过程中,我们只需要选取常用的,好用的来进行使用即可(有种垃圾堆里翻美食的感觉)
9 1
|
4天前
|
算法 安全 程序员
【C++】STL学习之旅——初识STL,认识string类
现在我正式开始学习STL,这让我期待好久了,一想到不用手撕链表,手搓堆栈,心里非常爽
16 0
|
4天前
|
存储 安全 测试技术
【C++】string学习 — 手搓string类项目
C++ 的 string 类是 C++ 标准库中提供的一个用于处理字符串的类。它在 C++ 的历史中扮演了重要的角色,为字符串处理提供了更加方便、高效的方法。
18 0
【C++】string学习 — 手搓string类项目
|
4天前
|
Java C++ Python
【C++从练气到飞升】06---重识类和对象(二)
【C++从练气到飞升】06---重识类和对象(二)
|
4天前
|
编译器 C++
【C++从练气到飞升】06---重识类和对象(一)
【C++从练气到飞升】06---重识类和对象(一)