当前位置: 首页 > wzjs >正文

长沙专门做网站公司学产品设计专业后悔了

长沙专门做网站公司,学产品设计专业后悔了,免费设计企业logo,php 上传到网站C类和对象中阶 01. 类的6个默认成员函数 在 C 中,类有 6 个特殊的默认成员函数(不是 6 个构造函数),它们会在特定情况下由编译器自动生成。包括构造函数,析构函数,拷贝构造和赋值运算符重载,取…

C++类和对象中阶

01. 类的6个默认成员函数

在 C++ 中,类有 6 个特殊的默认成员函数(不是 6 个构造函数),它们会在特定情况下由编译器自动生成。包括构造函数,析构函数,拷贝构造和赋值运算符重载,取地址和const取地址重载。简而言之就是,用户没显式实现,编译器会生成的成员函数。


02. 构造函数

2.1 构造函数概念

构造函数是特殊的成员函数,对象创建是自动调用并且初始化对象。如果类中没有定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成。

构造顺序:基类 → 成员对象 → 派生类。

2.2 构造函数特性

  • 函数名与类名相同,无返回值(连 void 都没有)。
  • 自动调用,不可手动调用。
  • 可以有参数(支持重载)。

默认构造函数:

我们不传参(编译器生成随机值)就可以调用的(如:Date d;),有三种,但是不能同时存在。包括无参形式 ,编译器生成和全缺省的形式,。编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员函数。

class Date {
public:Date() {  // 无参}Date(int year = 0, int month = 1,int day=1) {  // 全缺省_year = year;_month = month; _day = day;}//不写
private:_year;_month; _day;
};

带初始化列表形式

在构造函数体执行前初始化成员变量。

...public:Date(int year = 0, int month = 1,int day=1) {  // 初始:_year(year);_month(month), _day(day);}
...

03. 析构函数

3.1 析构函数概念

与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。销毁那个类的对象则调用该类的析构函数。

析构顺序:派生类 → 成员对象 → 基类(与构造相反)

3.2 析构函数特点

  • 函数名为 ~ClassName,无参数和返回值
  • 对象生命周期结束时自动调用
  • 一个类只能有一个析构函数,若未显式定义,系统自动生成

动态内存(new/delete)关闭、释放等。

~Stack(){if (_array){free(_array);_array = NULL;_capacity = 0;_size = 0;}
}

06. 拷贝构造函数

拷贝构造函数是一种特殊的构造函数,用于通过一个已存在的对象来初始化一个新对象。Date od2 = d1或Date od2(d1)都是拷贝构造。白话:构造一个d2,它和d1一模一样,d1变化他也随着变化!拿一个同类型的构造。

使用场景:

  • 用一个对象初始化另一个对象(如:Date od2 = d1或Date od2(d1)

  • 对象作为函数参数按值传递

传值形式拷贝构造问题:

当参数 d 是值传递时,调用拷贝构造函数时需要先复制实参到形参 d,而复制 d 又会调用拷贝构造函数,形成无限递归。对于类类型,拷贝操作需要调用拷贝构造函数。

递归调用链:

  • 进入 Date(Date d) 时,需要先拷贝 d1d
  • 拷贝 d1d 又会调用 Date(Date d),无限循环。

在这里插入图片描述

代码示例:

class Date {
public:Date(const Date d)/*==Date d=d2*/ {...}//会无穷递归
};

正确用法:

    //全缺省构造函数Date(int year = 0, int month = 1,int day=1){_year = year;_month = month;_day = day;}Date(Date& d){ //拷贝构造!Date& d=d2;//this指向调用者;例Date d2(d1),this指向调用者d2this->_year = d._year;this->_month = d._month;this->_day = d._day;}
main...Date d1(2025,5,12);//调用之前要先传参Date d2(d1);//拷贝构造d2;//和上面一样都是拷贝构造,两种写法,记住就行Date d3 = d1;

在这里插入图片描述
可知引用传参,别名指向同一个地址

在这里插入图片描述


05. 赋值运算符重载

5.1运算符重载

运算符重载允许用户自定义类对内置运算符,使得自定义类型能像内置类型一样进行运算。

**函数原型:**返回值类型operator操作符(参数列表)

  • 注意:
    • 只能重载C++已有的运算符,不能创建新运算符
    • 至少有一个操作数是类类型参数。
    • 不能改变运算符的优先级、结合性或操作数个数(如+始终是二元运算符)
    • :: .* ?: . sizeof 5个运算符不可重载
5.1.1运算符重载的两种形式

成员函数形式:

class Add {
public:Add(int x, int y) {}// 成员函数形式重载 +Add operator+(const Add& d2) const {//因为在class内部,this指针隐含了,指向被吊用的对象。在这个里面不能使用非成员函数形式会出现参数过多的报错!!!return Add(this->_x + d2.x, this->_y + d2.y);//this指针可不写}private:int _x, _y;
};// 使用
Add v1(1, 2), v2(3, 4);v1 + v2; // 等于 v1.operator+(v2)

非成员函数形式:

...private:int _year;int _month;int _day;
...
//在class外部
bool operator==(const Date& d1, const Date& d2){return d1._year == d2._year&& d1._month == d2._month&& d1._day == d2._day;
}
// 使用
d1==d2//等于operator==(d1,d2)

5.2 前置++和后置++

  • 前缀与后缀的区别
    • 前缀形式:ClassName& operator++()
    • 后缀形式:ClassName operator++(int)(参数int仅用于区分)
  • 示例
    class Sum {
    public:Sum() {}//  ++i,先加所以先自增,然后返回修改后的值Sum& operator++() {//this指向的对象函数结束后不会销毁,故以引用方式返回提高效率++_num;return *this;}  // i++,先使用一个临时变量保存当前值并返回这个值,期间对_num值自增Sum operator++(int) {Sum temp = *this;++_num;return temp;}
    private:int _num;
    };
    Counter c;
    Counter c1 = ++c; // 前置
    Counter c2 = c++; // 后置
    

5.3 赋值运算符重载

赋值运算符重载函数如果没有被显示定义,编译器会自动生成一个默认的赋值运算符重载,拷贝的方式是浅拷贝。与其他运算符重载函数不同的地方是赋值运算符重载必须定义成成员函数,不能定义成全局,如果定义成全局,类体里没有赋值运算符重载就会自动生成,这会与我们在全局定义的发生冲突。

class Date
{
public:Date(int year = 1900, int month = 1, int day = 1){_year = year;_month = month;_day = day;}Date& operator=(const Date& d) //引用传参避免拷贝提高效率               {                              //引用返回因为赋值运算符支持连续赋值 d1 = d2 = d3;if (this != &d){_year= d._year;_month = d._month;_day = d._day;}return *this;}
private:int _year;int _month;int _day;
};

06. 日期类实现

加速补齐实现中…

07. const成员修饰

const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。


08. &和const&操作符重载


文章转载自:

http://Ccs3q7K8.tngdn.cn
http://mwgstJ49.tngdn.cn
http://wU8Hy6J3.tngdn.cn
http://nHZQGHrT.tngdn.cn
http://dC7GeFCL.tngdn.cn
http://ih1mQ8X7.tngdn.cn
http://0PdwRzW8.tngdn.cn
http://2WtWMS8F.tngdn.cn
http://pzcztKyd.tngdn.cn
http://EdAUTdUK.tngdn.cn
http://eNJ4BVKV.tngdn.cn
http://YdjIQw23.tngdn.cn
http://4zBQ9Pbs.tngdn.cn
http://gLvNJZUs.tngdn.cn
http://F2FmWBAI.tngdn.cn
http://gMjx2Gcf.tngdn.cn
http://TgyGPFKf.tngdn.cn
http://WTQYeir8.tngdn.cn
http://ulQKKx1a.tngdn.cn
http://RiWeXstv.tngdn.cn
http://Rxh7d2Mi.tngdn.cn
http://nXwi40AC.tngdn.cn
http://ps7Im9RZ.tngdn.cn
http://xZDjV0Ab.tngdn.cn
http://WbuNe4nn.tngdn.cn
http://o9hsI3jz.tngdn.cn
http://YvK4im12.tngdn.cn
http://yfTgUsIc.tngdn.cn
http://esrCSwBC.tngdn.cn
http://2DSZ8VJq.tngdn.cn
http://www.dtcms.com/wzjs/775226.html

相关文章:

  • 网站首页做一点开有动画网站网站制作需要多少钱
  • 网站空间大小怎么看wordpress钩子自定义钩子
  • 网站建设如何加入字体分享惠网站怎么做
  • 用sql2000做网站写字楼装修风格
  • 北京模板网站开发全包在360上做网站怎么样
  • 网站中文域名到期有没有影响想制作自己的网站吗
  • 做网站用asp还是php好wordpress启用特色
  • 网站域名能改吗网站群建设目标
  • 做优化很好的网站百度开发者
  • 网站备案信息的核查方式文创产品设计创意图片
  • 快手刷赞网站推广软件网站推广效果
  • 做图片祝福的网站青岛即墨网站网页设计
  • 网站兼容性问题vps网站压缩
  • 网站建设东北电商法
  • 福州开发网站公司phpcms建设网站
  • 朔州路桥建设有限责任公司网站3d演示中国空间站建造历程
  • 做动画合成的视频网站wordpress导航菜单修改
  • 车辆保险网站仿中国化妆品网站模板
  • 做海报有什么借鉴的网站百度描述 网站
  • 15年做啥网站致富搜索引擎营销方法
  • 网站制作基础教程公司注册地址可以变更吗
  • 网站怎么seo合肥seo按天扣费
  • 找百度公司做网站怎么样郑州网站建设与制作
  • 外贸网站页面用什么做最好邢台太行中学高考成绩
  • 网站建设 代理培训班设计
  • 山东网站建设口碑好在哪买网站空间
  • 网站建设如何工作我想做跑腿网站怎么做
  • 商务网站建设与维护论文石家庄专业商城网站制作
  • 宝塔面板如何安装wordpressseo免费推广软件
  • 学校网站建设对教学的意义口碑好的东莞网站建设