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> using namespace std; class MyClass { public: int x; // 构造函数 MyClass(int val); // 成员函数声明 void printValue(); int getValue(); }; // 类外部成员函数定义 MyClass::MyClass(int val) : x(val) {} void MyClass::printValue() { cout << "Value of x: " << x << endl; } int MyClass::getValue() { return x; } int main() { MyClass obj(10); obj.printValue(); // 输出 Value of x: 10 cout << obj.getValue() << endl; // 输出 10 return 0; }
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; }
3、类成员函数的访问控制
成员函数可以访问类的私有(private
)和保护(protected
)成员。通常使用 public
访问控制符将成员函数暴露给外部使用,private
或 protected
用于限制对外访问。
#include <iostream> using namespace std; class MyClass { private: int privateValue; public: int publicValue; MyClass(int val1, int val2) : privateValue(val1), publicValue(val2) {} void setPrivateValue(int val) { privateValue = val; } void printValues() const { cout << "Private: " << privateValue << ", Public: " << publicValue << endl; } protected: int protectedValue; }; class DerivedClass : public MyClass { public: DerivedClass(int val1, int val2) : MyClass(val1, val2) {} void setProtectedValue(int val) { protectedValue = val; } void printProtectedValue() const { cout << "Protected: " << protectedValue << endl; } }; int main() { MyClass obj1(10, 20); obj1.printValues(); obj1.setPrivateValue(30); obj1.printValues(); DerivedClass obj2(100, 200); obj2.setProtectedValue(300); obj2.printProtectedValue(); return 0; }
4、常成员函数(const member functions)
常成员函数是指不会修改类的成员变量的函数,可以在常量对象上调用。
#include <iostream> using namespace std; class MyClass { public: int x; MyClass(int val) : x(val) {} // 常成员函数 void printValue() const { cout << "Value of x: " << x << endl; } }; int main() { // 创建对象并初始化 MyClass obj(10); // 调用常成员函数 obj.printValue(); // 输出 Value of x: 10 // 访问公有成员变量 cout << "x is: " << obj.x << endl; // 输出 x is: 10 return 0; }
5、静态成员函数(static member functions)
静态成员函数属于类本身,而不是类的实例,因此它不能访问非静态成员。静态成员函数只能访问静态成员变量和其他静态成员函数。
#include <iostream> using namespace std; class MyClass { public:// 静态成员变量,记录对象数量 static int count; MyClass() { count++; // 每创建一个对象,count增加 } static void printCount() { cout << "Count: " << count << endl; // 打印当前对象数量 } }; int MyClass::count = 0; // 静态成员变量初始化 int main() { MyClass obj1; // 创建第一个对象,count变为1 MyClass obj2; // 创建第二个对象,count变为2 MyClass obj3; // 创建第三个对象,count变为3 // 输出 Count: 3,打印当前对象数量 MyClass::printCount(); return 0; }