首页 > 代码库 > C++学习之路: class类外的成员函数定义 和 友元 的讨论

C++学习之路: class类外的成员函数定义 和 友元 的讨论

引言:成员函数定义在类内和类外的区别在于是否内联展开。

定义在类内一般都是内联展开的, 节省了调用函数的开销。如果函数体过于庞大,编译器会忽视内联建议

 

如果定义在类外,需要在类内声明,则程序运行时 是采用调用的方式 访问该函数,是非内联的方式。

 

 1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace std; 5  6 class Student 7 { 8     public: 9         Student();10         Student(int id, const string name, int age);11         void print() const;12     private:13         int id_;14         string name_;15         int age_;16 };17 18 Student::Student()19     :id_(0),20      name_(""),21      age_(0)22 {23 }24 25 Student::Student(int id,26                  const string &name,27                  int age)28     :id_(id),29      name_(name),30      age_(age)31 {32     33 }34 35 void Student::print() const36 {37     cout << "hello" << endl;38 }

 

 

 

下面我们 讨论一下友元 和 类对象的 关系。

 

 1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace std; 5  6 class Test 7 { 8     public: 9         friend class Other; //声明Other是Test的朋友10         friend void bar(const Test &t);11     private:12         int x_;13         int y_;14 };15 16 class Other17 {18     public:19         void foo(Test &t)20         {21             t.x_ = 10;22             t.y_ = 20;23         }24 };25 26 void bar(const Test &t)27 {28     cout << t.x_ << endl;29 }30 31 int main(int argc, const char *argv[])32 {33     Test t;34     return 0;35 }

 

通过上面的代码我们可以看到, 友元是可以直接访问,对象的私有数据的,   你只需要在class中声明一下 XX 类 是我的朋友即可, 关键字为friend。

函数也可以用 friend 关键字 来声明,则该函数可以直接访问 class 内的private 数据。

C++学习之路: class类外的成员函数定义 和 友元 的讨论