面向对象 3-3 小知识点 静态变量以及友元函数等细节

面向对象3-3 8.4时间.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。

//
//#include
//
//int main()
//{
// std::cout << “Hello World!\n”;
//}
//
运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
调试程序: F5 或调试 >“开始调试”菜单
//
入门使用技巧:
1. 使用解决方案资源管理器窗口添加/管理文件
2. 使用团队资源管理器窗口连接到源代码管理
3. 使用输出窗口查看生成输出和其他消息
4. 使用错误列表窗口查看错误
5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

//类和对象
//运算符重载就是表示的就是为了增加程序的可读性。
//赋值运算符是用一个已经存在的对象去修改对象的内容
//要想实现连续赋值的话我们就得使用引用类型的返回值
//const成员函数的调用权限

//类和对象(下篇)
//再谈构造函数
//#include
//using namespace std;
//class Date
//{
// //建议就是初始化列表就是都去写,而且成员变量的初始化进行在初始化列表中去进行,这样是比较清晰的。
//public:
// Date(int year, int month, int day)
// //初始化列表;真正初始化
// :_year(year)
// ,_month(month)
// ,_day(day)
// {
// 这里是类似于赋值的操作
// //_year = year;
// //_month = month;
// //_day = day;
// }
//
//private:
// int _year;
// int _month;
// int _day;
//};
//void test()
//{
// Date d(2021, 3, 3);
//
//}
//int main()
//{
// test();
// return 0;
//
//}

//
//#include
//using namespace std;
//class Time
//{
// //如果自定义成员没有默认构造,自定义必须在初始化中显示初始化。
//public:
// Time(int hour=1, int minute=1, int second=1)
// :_hour(hour)
// , _minute(minute)
// , _second(second)
// {}
//private:
// int _hour;
// int _minute;
// int _second;
//};
//class Date
//{
// //建议就是初始化列表就是都去写,而且成员变量的初始化进行在初始化列表中去进行,这样是比较清晰的。
// /类中包含以下成员,必须放在初始化列表位置进行初始化:
// 引用成员变量 必须在初始化列表中进行初始化
// const成员变量
// 自定义类型成员(该类没有默认构造函数
/
// //const 引用 在定义时候必须是初始化的。
//public:
// Date(int year, int month, int day)
// //初始化列表;真正初始化
// :_year(year)
// , _month(month)
// , _day(day)
// ,_hour(12)
// ,_time(9,50,59)
// {
// 这里是类似于赋值的操作
// //_year = year;
// //_month = month;
// //_day = day;
// }
//
//private:
// int& _year;
// int& _month;
// int& _day;
// const int _hour;
// Time _time;
//};
//void test()
//{
// Date d(2021, 3, 3);
//
//}
//int main()
//{
// test();
// return 0;
//
//}

//#include
//using namespace std;
//class Time
//{
// //如果自定义成员没有默认构造,自定义必须在初始化中显示初始化。
// //成员的初始化放置在初始化列表中。
//public:
// Time(int hour = 1, int minute = 1, int second = 1)
// {}
//private:
// int _hour;
// int _minute;
// int _second;
//};
//class Date
//{
//public:
// Date()
// {}
//
//private:
// Time _time;
//};
//void test()
//{
// Date d;
//
//}
//int main()
//{
// test();
// return 0;
//
}
初始化列表当中,初始化顺序按照的是声明顺序。
//#include
//using namespace std;
//class A
//{
//public:
// A(int a)
// :_a1(a)
// , _a2(_a1)
// {}
// void Print()
// {
// cout << _a1 << " " << _a2 << endl;
//
// }
//private:
// int _a2;
// int _a1;
//};
//void test()
//{
// A aa(1);
// aa.Print();
//}
//int main()
//{
//
// test();
// return 0;
//}

//单参隐式类型转换
//构造函数不仅可以构造与初始化对象,对于单个参数的构造函数,还具有类型转换的作用。
//用explicit修饰构造函数,将会禁止单参构造函数的隐式转换。
//#include
//using namespace std;
//class A
//{
//public:
// //explicit
// A(int a)
// :_a(a)
// {
// cout << “A(int)” << endl;
// }
// A(const A& aobj)
// {
// _a = aobj._a;
// }
//private:
// int _a;
//};
//void test()
//{
// A aobj(10);
// A aobj2= aobj;
// A aobj3 = 20;
//}
//
//int main()
//{
// test();
// return 0;
//}

//
//#include
//using namespace std;
static 静态成员
//class A
//{
//public:
// A()
// {
// ++_count;
// }
// A(const A& a)
// {
// ++_count;
// }
// //this指针的意义;执行当前调用此函数的对象。
// //静态成员函数是不包含this指针的。
// //static函数可以通过类名来进行访问,通过类名访问时,没有对象,this没有指向。
// static int getCount()
// {
// //fun(); //缺少this指针,不能调用非静态成员函数
// return _count;
// }
// //普通成员函数是包含成员函数
// void fun()
// {
// this->getCount();//通过this指针来进行静态成员函数。
// cout << “fun()” << endl;
// }
//private:
// //static成员是所有对象共享
// //static成员变量,必须在类外初始化
// static int _count;
//};
//int A::_count = 0;
//A funA(A a)
//{
// return a;
//}
//void test()
//{
// cout << A::_count << endl;
// A a1;
// A a2;
// A a3= funA(a1);
// cout << a1.getCount() << endl;
// cout << a2.getCount() << endl;
// cout << a3.getCount() << endl;
// //等价与下边的访问形式
// cout << A::getCount() << endl;
// //static成员的访问形式
// //1.对象.static成员
// cout << a1._count << endl;
// //2.类型+::+static成员
// //通过类名访问
// cout << A::_count << endl;
//}
//int main()
//{
// test();
// return 0;
//
//}
//c++11新的应用
//#include
//using namespace std;
//class A
//{
// //
//public:
// A(int a=1)
// :_a(a)
// {
//
// }
//private:
// //c++11新的初始化方式;在成员变量生命中,给一个缺省值
// //此处声明的缺省值只有在没有其他值可选时,才会用。
// //此语法仅限于非静态成员,静态成员还是得在类外初始化。
// int _a = 0;
//};
//void test()
//{
// A a(10);
// A a2;
//
//}
//int main()
//{
// test();
// return 0;
//}

//友元函数
#include
using namespace std;
class Date
{
public:
//友元函数的声明 此函数可以访问当前类的私有成员
//友元声明可以放在任何地方。
friend void operator<<(ostream& _count, const Date& d);
Date(int y = 1, int m = 2, int d = 3)
:_y(y)
, _m(m)
, _d(d)
{}
//1.void operator<<(ostream& _count)
{
_count << _y << “-” << _m << “-” << _d << endl;
}
private:
int _y;
int _m;
int _d;
};
//2.
void operator<<(ostream& _count,const Date& d)
{
_count << d._y << “-” << d._m << “-” << d._d << endl;
}
void test()
{
Date d(2021, 3, 3);
//d.operator<<(cout);
//d << cout;
cout << d ;
}
int main()
{
test();
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值