自学内容网 自学内容网

浅谈C嘎嘎类与对象

本篇文章与大家浅谈一下C嘎嘎的类与对象知识点

类的定义

关键字:class

语法格式:

class  类名

{

};//这里的分号不能少

此外,class有三个属性分别是private、public、protected,这三个属性是干啥的,相信大家通过这三个单词的中文意思应该也能知道。那么我们来看一下下面的这个例子。

从上面的图片中,我们可以看到整个类分为了两个部分:公共部分和私有部分,私有部分中声明变量,公有部分定义函数以及构造函数等等

构造函数

特点

1. 函数名与类名相同。
2. ⽆返回值。
3. 对象实例化时系统会⾃动调⽤对应的构造函数。
4. 构造函数可以重载。
5. 如果类中没有显式定义构造函数,则C++编译器会⾃动⽣成⼀个⽆参的默认构造函数,⼀旦⽤⼾显式定义编译器将不再⽣成。
6. ⽆参构造函数、全缺省构造函数、我们不写构造时编译器 默认⽣成的构造函数 ,都叫做默认构造函数。

无参构造函数

类名()

{
    变量 = 初始值;

}

有参构造函数

类名(类型  变量)

{
     (类中私有化的变量) 变量 = 变量(类名括号内的变量);

}

全缺省有参构造函数

类名(类型 变量 = 初始值)

{
   (类中私有化的变量) 变量 = 变量(类名括号内的变量);

}

析构函数

1. 析构函数名是在类名前加上字符~。eg.~stack()

2.  ⽆参数⽆返回值。(这⾥跟构造类似,也不需要加void)

3. ⼀个类只能有⼀个析构函数。若未显式定义,系统会⾃动⽣成默认的析构函数。

4. 对象⽣命周期结束时,系统会⾃动调⽤析构函数。

5. 跟构造函数类似,我们不写编译器⾃动⽣成的析构函数对内置类型成员不做处理,⾃定类型成员会 调⽤他的析构函数。 

拷贝构造函数

1. 拷⻉构造函数是构造函数的⼀个重载。
2. 拷⻉构造函数的参数只有⼀个且必须是类类型对象的引⽤,使⽤传值⽅式编译器直接报错,因为语法逻辑上会引发⽆穷递归调⽤。
3. C++规定⾃定义类型对象进⾏拷⻉⾏为必须调⽤拷⻉构造,所以这⾥⾃定义类型传值传参和传值返回都会调⽤拷⻉构造完成。
4. 若未显式定义拷⻉构造,编译器会⽣成⾃动⽣成拷⻉构造函数。
举个例子:
Date  (const  Date&  d)
{
      _year = d. year;
//类中的变量   对象中的变量
}
拷贝构造的形式:

运算符重载

1. 概念:当运算符被⽤于类类型的对象时,C++语⾔允许我们通过运算符重载的形式指定新的含义。

2. 形式:运算符重载是具有特殊名字的函数,即operator和运算符共同构成,见第6点
3. 参数个数:重载运算符函数的参数个数和该运算符作⽤的运算对象数量⼀样多。
4. 隐含条件 :如果一个重载运算符函数是成员函数,则它的第一个运算对象默认传给隐式的this指针,因此运算符重载作为成员函数时,参数比运算对象少一个
5. 不能重载的运算符: .*      、    ::      、 sizeof     、   ?:   、    .
6. 重载操作符至少有一个类类型参数,不能通过运算符重载改变内置类型对象的含义    
eg. operator + (int x, int y)

赋值运算符

赋值运算符重载是一个默认成员函数,用于完成两个已经存在的对象直接拷贝的赋值

拷贝构造用于一个对象拷贝初始化给另一个创建的对象类名

形式: 对象名(前对象名);或   类名   对象名  = 前对象名

拷贝赋值构造语法格式:

类名  operator = (const Date& 别名)

{

       变量名 = 对象名.成员变量名;

          return *this

}

类名&  operator = (const Date& 别名)

{

       变量名 = 对象名.成员变量名;

          return *this

}

特点
1. 赋值运算重载的参数建议写成const 当前类类型引⽤,否则会传值传参会有拷⻉
2.  有返回值,且建议写成当前类类型引⽤,引⽤返回可以提⾼效率,有返回值⽬的是为了⽀持连续赋 值场景。
3.  没有显式实现时,编译器会⾃动⽣成⼀个默认赋值运算符重载,默认赋值运算符重载⾏为跟默认拷贝构 造函数类似,对内置类型成员变量会完成值拷⻉/浅拷⻉(⼀个字节⼀个字节的拷⻉),对⾃定义类型 成员变量会调⽤他的赋值重载。

隐形的指针——this指针

this指针隐藏的位置

1. 类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针

2. 被const修饰的成员函数

取地址运算符重载

const修饰成员函数

const作用:和c语言指针时的const作用一样,都是用于缩小权限,注意这里使用了const后权限只有缩小不存在放大


原文地址:https://blog.csdn.net/2302_80418176/article/details/140422054

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!