王建伟c++新经典笔记 自用14.1 - 14.2.3

Time.hpp

//
//  Time.hpp
//  stud
//
//  Created by pt on 2024/4/8.
//

#ifndef Time_hpp
#define Time_hpp
//类声明
#include <iostream>
using namespace std;
class Time
{
private:
    int Millisecond;
    void initMillTime(int mls);//成员函数的声明 -- 配套成员函数的实现
public:
    int Hour;
    int Minute;
    int Second;
    Time(int tmphour, int tmpmin, int tmpsec);//构造函数
    Time();//构造函数
    void initTime(int tmphour, int tmpmin, int tmpsec);//成员函数的声明 -- 配套成员函数的实现
    void show(){std::cout << "hahaha" << std::endl;}//成员函数的定义
};

#endif /* Time_hpp */

Time.cpp

//
//  Time.cpp
//  stud
//
//  Created by pt on 2024/4/8.
//

#include "Time.hpp"
Time::Time(int tmphour, int tmpmin, int tmpsec)//构造函数的实现
{
    Hour = tmphour;
    Minute = tmpmin;
    Second = tmpsec;
    
    initMillTime(0);//⬇️
}
Time::Time()//构造函数的实现
{
    Hour = 12;
    Minute = 59;
    Second = 59;
    initMillTime(59);
}
void Time::initMillTime(int mls)//成员函数的实现-- 配套成员函数的声明
{
    Millisecond = mls;//私有成员
}

main.cpp

#include <iostream>
#include "Time.hpp"
using namespace std;
int main()
{
    //Time myTime;//此条语句失效,没有对应的构造器为其初始化
    Time myTime(11, 14, 5);//构造函数初始化
    Time myTimea;//无参构造函数初始化
    
    
    Time(12,13,52);//创建了一个临时的 Time对象,但这个对象并不会绑定到任何变量上,因此它在表达式结束后立即被销毁。这种语句通常用于临时对象的创建,例如在函数调用中传递匿名对象。
    //如果你想在 main 函数中创建一个 Time 对象并保持它存在,你需要给这个对象命名,例如:Time myTime(12,13, 15);
    Time{12,13,15};//同理,创建了一个临时对象

    Time myTime1(12, 13, 52);//直接初始化
    Time myTime1a;//直接初始化,无参
    
    Time myTime2{12, 13, 52};//列表初始化 不允许缩窄变换,允许对于聚合类型(如数组、结构体等)提供初始化
    Time myTime2a{};//列表初始化 无参 不允许缩窄变换,允许对于聚合类型(如数组、结构体等)提供初始化
    
    Time myTime3 = Time(12, 13, 52);//在C++98旧标准下可能会创建一个临时对象然后复制给 myTime,但在C++11新标准下,拷贝/移动构造通常会被优化掉,直接在 myTime 的存储位置构造对象。
    Time myTime3a = Time();//调用无参的构造函数,在C++98旧标准下可能会创建一个临时对象然后复制给 myTime,但在C++11新标准下,拷贝/移动构造通常会被优化掉,直接在 myTime 的存储位置构造对象。
    
    Time myTime4 = Time{12, 13, 52};//在C++98旧标准下可能会创建一个临时对象然后复制给 myTime,但在C++11新标准下,拷贝/移动构造通常会被优化掉,直接在 myTime 的存储位置构造对象。
    Time myTime4a = Time{};//调用无参的构造函数,在C++98旧标准下可能会创建一个临时对象然后复制给 myTime,但在C++11新标准下,拷贝/移动构造通常会被优化掉,直接在 myTime 的存储位置构造对象。
    
    Time myTime5 = {12, 13, 52};//用到隐式类型转化,把花括号中的参数进行隐式类型转换,以创建一个 Time 对象,并将其赋值给 myTime5
    Time myTime5a = {};//省略了 无参 Time myTime5a = Time{};
    
    //不允许Time myTime5 = (12, 13, 52);因为这里使用的是圆括号,而且在圆括号中使用了逗号运算符。在 C++ 中,逗号运算符是一个顺序点,它会按照从左到右的顺序计算表达式,然后返回最后一个表达式的结果。因此,(12, 13, 52) 会先计算 12,然后是 13,最后计算 52 并返回 52。这个表达式的结果是 52,而不是一个三元素的列表。因此,编译器会试图使用单个整数 52 来初始化 myTime5 对象,这当然会失败,除非 Time 类定义了一个接受单个整数参数的构造函数。
    //对象的复制 不调用构造函数
    Time myTime6  = myTime;
    Time myTime7(myTime);
    Time myTime8{myTime};
    Time myTime9 = {myTime};


    
    //每个对象都有不同的内存地址
    std::cout << "初始化部分" << std::endl;
    std::cout << &myTime << '\n'<< &myTimea << '\n' << &myTime1 << '\n' << &myTime1a << '\n'<< &myTime2 << '\n' << &myTime2a << '\n'<< &myTime3 << '\n' << &myTime3a << '\n'<< &myTime4 << '\n' << &myTime4a << '\n'<< &myTime5 << '\n' << &myTime5a << '\n' << std::endl;
    std::cout << "复制部分" << std::endl;
    std::cout<< &myTime6 << '\n' << &myTime7 << '\n' << &myTime8 << '\n' << &myTime9 << '\n' << std::endl;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一门linux下c++通讯架构实战课程,针对c/c++语言已经掌握的很熟并希望进一步深造以将来用c++在linux下从事网络通讯领域/网络服务器的开发和架构工作。这门课程学习难度颇高但也有着极其优渥的薪水(最少30K月薪,最高可达60-80K月薪),这门课程,会先从nginx源码的分析和讲解开始,逐步开始书写属于自己的高性能服务器框架代码,完善个人代码库,这些,将会是您日后能取得高薪的重要筹码。本课程原计划带着大家逐行写代码,但因为代码实在过于复杂和精细,带着写代码可能会造成每节课至少要4~5小时的超长时间,所以老师会在课前先写好代码,主要的时间花费在逐行讲解这些代码上,这一点望同学们周知。如果你觉得非要老师领着写代码才行的话,老师会觉得你当前可能学习本门课程会比较吃力,请不要购买本课程,以免听不懂课程并给老师差评,差评也会非常影响老师课程的销售并造成其他同学的误解。 这门课程要求您具备下面的技能:(1)对c/c++语言掌握的非常熟练,语言本身已经不是继续学习的障碍,并不要求您一定熟悉网络或者linux;(2)对网络通讯架构领域有兴趣、勇于挑战这个高难度的开发领域并期望用大量的付出换取高薪;在这门课程中,实现了一个完整的项目,其中包括通讯框架和业务逻辑框架,浓缩总结起来包括如下几点:(1)项目本身是一个极完整的多线程高并发的服务器程序;(2)按照包头包体格式正确的接收客户端发送过来的数据包, 完美解决收包时的数据粘包问题;(3)根据收到的包的不同来执行不同的业务处理逻辑;(4)把业务处理产生的结果数据包正确返回给客户端;本项目用到的主要开发技术和特色包括:(1)epoll高并发通讯技术,用到的触发模式是epoll中的水平触发模式【LT】;(2)自己写了一套线程池来处理业务逻辑,调用适当的业务逻辑处理函数处理业务并返回给客户端处理结果;(3)线程之间的同步技术包括互斥量,信号量等等;(4)连接池中连接的延迟回收技术,这是整个项目中的精华技术,极大程度上消除诸多导致服务器程序工作不稳定的因素;(5)专门处理数据发送的一整套数据发送逻辑以及对应的发送线程;(6)其他次要技术,包括信号、日志打印、fork()子进程、守护进程等等;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值