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

C++的类与对象下

目录

1.初始化列表

2.隐式类型转换

1.单参数

2.多参数(C++11提供的新功能)

3.static成员

4.友元

5.内部类

6.匿名对象


1.初始化列表

C++祖师爷规定初始化列表成员变量定义与初始化的地方。

class Time
{
public:Time(int hour):_hour(hour){cout << "Time()" << endl;}
private:int _hour;
};class Date
{
public:Date(int& x, int year = 1, int month = 1, int day = 1):_year(year), _month(month), _day(day), _t(12), _ref(x), _n(1){// error : “Time”: 没有合适的默认构造函数可⽤ // error : “Date::_ref” : 必须初始化引⽤ // error : “Date::_n” : 必须初始化常量限定类型的对象 }void Print() const{cout << _year << "-" << _month << "-" << _day << endl;}
private:int _year;int _month;int _day;Time _t; // 没有默认构造 int& _ref; // 引⽤ const int _n; // const 
};
int main()
{int i = 0;Date d1(i);d1.Print();return 0;
}

初始化列表初始化变量的顺序与类里声明变量的顺序是一致的

2.隐式类型转换

1.单参数

class Time1
{
public:Time1(int hour=0):_hour(hour){}Time1(Time1& t){_hour = t._hour;}
private:int _hour;
};int main()
{//第一点:3会隐式类型转换成Time1类的对象,其中调用的就是构造函数//第二点:构造完临时对象后,就会将这个临时对象拷贝构造给t对象Time1 t = 3;return 0;
}

2.多参数(C++11提供的新功能)

class Time1
{
public:Time1(int hour1=0,int hour2=0):_hour1(hour1),_hour2(hour2){}Time1(Time1& t){_hour1 = t._hour1;_hour2 = t._hour2;}
private:int _hour1;int _hour2;
};int main()
{//第一点:{3,3}会隐式类型转换成Time1类的对象,其中调用的就是构造函数//第二点:构造完临时对象后,就会将这个临时对象拷贝构造给t对象Time1 t = { 3, 3 };return 0;
}

const Time1& t = { 3,3 };

其中引用的话必须是const引用,因为{3,3}构造的临时对象具有常性,不能被改变。

3.static成员

静态成员不存在对象里,所以不走初始化列表。

// 实现⼀个类,计算程序中创建出了多少个类对象? 
#include<iostream>
using namespace std;
class A
{
public:A(){++_scount;}A(const A& t){++_scount;}~A(){--_scount;}static int GetACount(){return _scount;}
private:// 类⾥⾯声明 static int _scount;
};
// 类外⾯初始化 
int A::_scount = 0;
int main()
{cout << A::GetACount() << endl;A a1, a2;A a3(a1);cout << A::GetACount() << endl;cout << a1.GetACount() << endl;// 编译报错:error C2248: “A::_scount”: ⽆法访问 private 成员(在“A”类中声明) //cout << A::_scount << endl;
}

4.友元

class Date
{friend void Print(Date x);
public:Date(int hour, int minute){_hour = hour;_minute = minute;}private:int _hour;int _minute;
};//Print函数需要访问Date类中的成员变量,所以需要将其设置为友元函数
void Print(Date x)
{cout << x._hour << '/' << x._minute << endl;
}
class Date
{friend class B;
public:Date(int hour, int minute){_hour = hour;_minute = minute;}private:int _hour;int _minute;
};//如果一个类里面要频繁调用另一个类的私有成员变量,则可以将此类设置为另一个类的友元类
class B
{
public:void Print1(Date x){cout << x._hour << endl;}void Print2(Date x){cout << x._minute << endl;}
};

5.内部类

class B
{
private:int a;int b;public://A默认是B的友元类class A{public:void Print(B c){cout << c.a << c.b << endl;}};
};

6.匿名对象

class Date
{
public:Date(int hour = 0){_hour = hour;}void Print(){cout << _hour << endl;}private:int _hour;
};int main()
{//定义有名对象Date d;Date d1(1);//匿名对象Date();Date(1);//当我们只想要调用函数时,用匿名对象比较方便Date().Print();return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • sshpass 实现的SSH免交互密码登录和ARM移植
  • JSON数组
  • opencv实战项目二十四:棋盘格相机内参标定
  • SpinalHDL之结构(一)
  • 水下目标检测数据集 urpc2021
  • 智创未来,景联文科技提供全方位数据采集服务
  • CAD中的spline详解
  • Vue自定义指令以及项目中封装过的自定义指令
  • ACE之ACE_Reactor_Notify
  • C++ List (带你一篇文章搞定C++中的List类)
  • 如何申请和使用免费SSL证书
  • 加速开发体验:为 Android Studio 设置国内镜像源
  • Web植物管理系统-下位机部分
  • java项目之基于springboot的贸易行业crm系统(源码+文档)
  • “Fast-forward“ in git-pull result
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • axios 和 cookie 的那些事
  • canvas 五子棋游戏
  • ES6语法详解(一)
  • HomeBrew常规使用教程
  • java中的hashCode
  • MySQL几个简单SQL的优化
  • npx命令介绍
  • Object.assign方法不能实现深复制
  • PHP面试之三:MySQL数据库
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Selenium实战教程系列(二)---元素定位
  • windows下使用nginx调试简介
  • 成为一名优秀的Developer的书单
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 关于for循环的简单归纳
  • 世界上最简单的无等待算法(getAndIncrement)
  • 在Unity中实现一个简单的消息管理器
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • # centos7下FFmpeg环境部署记录
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (HAL库版)freeRTOS移植STMF103
  • (Java数据结构)ArrayList
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (四)linux文件内容查看
  • (转)linux 命令大全
  • ***测试-HTTP方法
  • .env.development、.env.production、.env.staging
  • .Net 6.0--通用帮助类--FileHelper
  • .NET Standard 的管理策略
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net8.0与halcon编程环境构建
  • .NET下ASPX编程的几个小问题
  • @Async注解的坑,小心