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;
}