首页 > 代码库 > 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类外的成员函数定义 和 友元 的讨论
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。