友元
-
class buiding { friend void Goodboy(buiding*bui); public: int m_age; private: int m_size; }; //全局函数 void Goodboy(buiding*bui) { cout<<bui->m_age<<endl;//可以调用public中的m_age cout<<bui->m_size<<endl;//m_size调用需要声明友元 }
-
私有的部分要声明友元。
友元类
-
类外写成员函数
-
class Phone;//类的声明 class Person { public: Person(); void visit(); private: Phone*phone; }; class Phone { friend class Person; public: Phone(); private: string m_name; }; Phone::Phone() { this->m_name="小民"; } Person::Person() { phone=new Phone;//地址相同,用于连接phone类 } void Person::visit()//在类person中调用phone中的私有类 { cout<<phone->m_name; } int main() Person p; p.visit();
-
成员函数做友元
-
friend void Phone::visit();
-
-
运算符重载
-
加法
-
全局函数重载,在类和main函数中间进行实现。
-
Person operator+(person&p1,person&p2) { Person temp; temp.m_a=p1.m_a+p2.m_a; temp.m_b=p1.m_b+p2.m_b; return temp; }
-
成员函数重载
-
person operator+(person&p) { person temp; temp.m_a=this->m_a+p.m_a; temp.m_b=this->m_b+p.m_b; return temp; }
-
左移运算符重载
-
左移运算符重载只能用全局函数进行重载,因为成员函数在调用时会使cout在方法的右边。例如:p.text()=cout
-
class person { public: int age; int age2; }; ostream &operator<<(ostream&out,perspm&p)//ostream是cout的数据类型,ostream作为返回的作用是作为链式输出。 { out<<p.age<<p.age2<<endl; return out; }
自增运算符重载
-
#include <iostream> using namespace std; class Person { friend ostream&operator<<(ostream&cout,Person&p);//对左移运算符进行重载 public: Person () { m_age = 0; } //前置递增 /* Person&operator++()//实现++的时候用引用的形式进行返回,能对++后的值返回在进行++; { m_age++; return *this; } */ //后置递增 Person operator++(int)//不能用引用,引用无需复制一份内存。而局部变量temp的调用后释放无法加加,为与前置递增区分开来用占位符来区分。 { Person temp=*this; m_age++; return temp; } private: int m_age; }; ostream & operator<< (ostream & cout, Person & p)//进行左移运算符调出m_a; { cout << p.m_age << endl; return cout;//实现链式输出,将++后的值返回给Person中 } /* void test() { Person p; ++p; cout<<p<<endl; } */ void test01() { Person p; p++; cout<<endl; } int main () { test(); test01(); return 0; }