1、成员函数(方法)声明
成员函数可以定义在类定义内部,或者单独使用范围解析运算符 ::
来定义。在类定义中定义的成员函数把函数声明为内联的,即便没有使用 inline 标识符。
例如,
#include<iostream> using namespace std; #include <string> class Foo { public: std::string s; // 默认构造函数 Foo() { std::cout << "default constructor" << std::endl; } // 复制构造函数 Foo(const Foo& foo) { std::cout << "copy constructor" << std::endl; s = foo.s; } // 复制赋值运算符 Foo& operator=(const Foo& foo) { std::cout << "copy assignment operator" << std::endl; s = foo.s; return * this;} // 移动构造函数 Foo(Foo&& foo) { std::cout << "move constructor" << std::endl; s = std::move(foo.s); } // 移动赋值运算符 Foo& operator=(Foo&& foo) { std::cout << "move assignment operator" << std::endl; s = std::move(foo.s); return *this;} }; int main() { Foo foo1; Foo foo2(foo1); foo1 = foo2; Foo foo3(std::move(foo1)); foo2 = std::move(foo3); }
2、使用范围解析运算符(::)
可以在类的外部使用范围解析运算符 ::
定义函数。
例如,
#include <iostream> #include<cstring> using namespace std; class Person { string name; int age; char sex; // 成员函数声明 public: void Register(string,int,char); void ShowMe(); void Input(); string ID; }; // 成员函数定义 void Person::Register(string na,int ag,char se) { name=na; age=ag; sex=se; } void Person::ShowMe() { cout<<name<<" "<<age<<" "<<sex<<endl; } void Person::Input() { cin>>name>>age>>sex; } int main() { Person person1,person2; person1.Input(); person2.Register("cjavapy",19,'m'); person1.ShowMe(); person2.ShowMe(); return 0; }