p2p种子网站建设,好的网站设计,网站风格优势,今天刚刚发生的新闻事故前言 大家好吖#xff0c;欢迎来到 YY 滴 C系列 #xff0c;热烈欢迎#xff01; 【 类与对象-三部曲】的大纲主要内容如下#xff1a; 如标题所示#xff0c;本章是【 类与对象-三部曲】三章中的第一章节——基础知识章节#xff0c;主要内容如下#xff1a; 目录
一.…
前言 大家好吖欢迎来到 YY 滴 C系列 热烈欢迎 【 类与对象-三部曲】的大纲主要内容如下 如标题所示本章是【 类与对象-三部曲】三章中的第一章节——基础知识章节主要内容如下 目录
一. This指针
1.编译器对This指针的处理本质——不允许修改this但是允许修改this指向的值
2.This不能在形参和实参显示传递但是可以在函数内部显示使用
3.例题对比传入空指针时this的运作状况
二.explicit关键字
一.基本性质
二.相关知识补充隐式类型转换
1.为什么加上引用无法发生隐式类型转换
三.auto关键字
四.友元
1.友元函数
2.友元类 一. This指针 This指针本质是形参所以this指针是和普通参数一样存在函数调用的栈帧里 1.编译器对This指针的处理本质——不允许修改this但是允许修改this指向的值 void Print(Date* const this)
{cout this-_year - this-_month - this-_day endl;
} 2.This不能在形参和实参显示传递但是可以在函数内部显示使用 void Print()
{// this不能在形参和实参显示传递但是可以在函数内部显示使用//this nullptr;cout this endl;cout this-_year - _month - _day endl;
} 3.例题对比传入空指针时this的运作状况 重点注意p-Print ( ) 并非解引用操作 注意点Print的地址不在对象中 二.explicit关键字 一.基本性质 用explicit修饰构造函数将会禁止构造函数的隐式转换 代码演示 class Date
{
public:// 1. 单参构造函数没有使用explicit修饰具有类型转换作用// explicit修饰构造函数禁止类型转换---explicit去掉之后代码可以通过编译explicit Date(int year):_year(year){}/*// 2. 虽然有多个参数但是创建对象时后两个参数可以不传递没有使用explicit修饰具有类型转
换作用// explicit修饰构造函数禁止类型转换explicit Date(int year, int month 1, int day 1): _year(year), _month(month), _day(day){}*/Date operator(const Date d) 拷贝构造{if (this ! d){_year d._year;_month d._month;_day d._day;}return *this;}
private:int _year;int _month;int _day;
};void Test()
{Date d1(2022);// 用一个整形变量给日期类型对象赋值// 实际编译器背后会用2023构造一个无名对象最后用无名对象给d1对象进行赋值d1 2023;
} 二.相关知识补充隐式类型转换 类型转换会产生临时变量/对象 PS构造函数不仅可以构造与初始化对象对于单个参数或者除第一个参数无默认值其余均有默认值的构造函数还具有类型转换的作用 图示 1.为什么加上引用无法发生隐式类型转换 PS涉及到权限知识点————可通过传送门【】查看const知识点❀❀❀❀ 图示 三.auto关键字 【待补】 四.友元 1.友元函数 友元函数可以直接访问类的私有成员它是定义在类外部的普通函数不属于任何类但需要在类的内部声明声明时需要加friend关键字 说明 友元函数可访问类的私有和保护成员但不是类的成员函数 友元函数不能用const修饰 友元函数可以在类定义的任何地方声明不受类访问限定符限制 一个函数可以是多个类的友元函数 友元函数的调用与普通函数的调用原理相同友元函数的声明与函数声明不同仅仅是表达权限 代码演示 class Date
{ //友元函数声明——表达一种权限函数可以访问类内对象friend ostream operator(ostream _cout, const Date d);friend istream operator(istream _cin, Date d);public:Date(int year 1900, int month 1, int day 1): _year(year), _month(month), _day(day){}
private:int _year;int _month;
int _day;
};ostream operator(ostream _cout, const Date d)
{_cout d._year - d._month - d._day;return _cout;
}istream operator(istream _cin, Date d)
{_cin d._year;_cin d._month;_cin d._day;return _cin;
}int main()
{Date d;cin d;cout d endl;return 0;
} 2.友元类 说明 友元类的所有成员函数都可以是另一个类的友元函数都可以访问另一个类中的非公有成员。友元关系是单向的不具有交换性。 例比如下面Time类和Date类在Time类中声明Date类为其友元类那么可以在Date类中直接访问Time 类的私有成员变量但想在Time类中访问Date类中私有的成员变量则不行。 友元关系不能传递 如果B是A的友元C是B的友元则不能说明C时A的友元友元关系不能继承在继承板块有详细介绍 代码演示 class Time
{friend class Date;
// 声明日期类为时间类的友元类
//则在日期类中就直接访问Time类中的私有成员变量
public:Time(int hour 0, int minute 0, int second 0): _hour(hour), _minute(minute), _second(second){}
private:int _hour;int _minute;int _second;
};
class Date
{
public:Date(int year 1900, int month 1, int day 1): _year(year), _month(month), _day(day){}void SetTimeOfDate(int hour, int minute, int second){// 直接访问时间类私有的成员变量_t._hour hour;_t._minute minute;_t._second second;}
private:int _year;int _month;int _day;Time _t;
};