【C++】类和对象终篇
个人主页 : zxctscl
文章封面来自:艺术家–贤海林
如有转载请先通知
文章目录
- 1. 前言
- 2. 友元
- 2.1 友元函数
- 2.2 友元类
- 3. 内部类
- 4. 匿名对象
- 5. 拷贝对象时的一些编译器优化
- 6. 再次理解类和对象
1. 前言
在上一篇博客中提到了类和对象中的构造函数与static成员 【C++】类和对象之初始化列表与static成员,接下来一起看看类和对象中的友元。
2. 友元
友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。
友元分为:友元函数和友元类
2.1 友元函数
问题:现在尝试去重载operator public: Date(int year, int month, int day) : _year(year) , _month(month) , _day(day) {} // d1 _cout friend ostream& operator} private: int _year; int _month; int _day; }; ostream& operator _cout _cin d._year; _cin d._month; _cin d._day; return _cin; } int main() { Date d; cin d; cout 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) { _t._minute++; } 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; }; public: class B { private: int _b1; }; private: int _a1; int _a2; }; int main() { cout public: A(int a = 0) :_a(a) { cout cout public: int func(int n) { cout // 有名对象 A aa1; A aa2(10); // 匿名对象 A(); A(10); return 0; } public: int func(int n) { cout public: A(int a = 0) :_a(a) { cout cout cout _a = aa._a; } return *this; } ~A() { cout } void f2(const A& aa) {} int main() { A aa1 = 2; // 构造 + 拷贝构造 -》 直接构造 const A& aa2 = 2; f1(aa1); f1(A(2)); // 构造 + 拷贝构造 -》 直接构造 f2(aa1); return 0; } public: A(int a = 0) :_a(a) { cout cout cout _a = aa._a; } return *this; } ~A() { cout } void f2(const A& aa) {} A f3() { A aa; return aa; } int main() { f3(); A ret = f3(); return 0; } A aa; return aa; } A f4() { return A(); } int main() { A ret = f4(); return 0; }