在C++中,成员函数是一种特殊的函数,它与类或对象的实例相关联。成员函数可以访问类的数据成员及其它成员函数。它是C++语言的一个重要组成部分,也是OOP编程的核心。本文将深入介绍C++中的成员函数使用技巧和示例。
一、成员函数的基本使用
C++中的成员函数定义通常遵循如下格式:
class<类名>
{
public:
返回值类型 函数名(参数列表)
{
//函数体
}
};
其中,class<类名>指定义一个C++类,public表示该函数是公共函数,可以从其他类中访问;返回值类型就是函数返回的值类型,如果该函数没有返回值,可以使用void;函数名表示函数的名称;参数列表指函数需要接收的参数。
成员函数必须是类的成员,也就是函数的定义必须在类声明之内。当对象被创建后,成员函数才能被调用。我们可以使用对象名和"."运算符来调用成员函数。
例如:
class MyClass
{
public:
void func()
{
std::cout << "Hello World" << std::endl;
}
};
int main()
{
MyClass obj;
obj.func();
return 0;
}
在上面的例子中,我们定义了一个名为MyClass的类,其中包含一个名为func的公共成员函数,该函数可以打印输出“Hello World”。在main函数中,我们创建了一个名为obj的MyClass对象,并使用obj.func()调用func函数。
二、成员函数的特性
成员函数具有以下特性:
1. 访问数据成员
成员函数可以直接访问类中的任何数据成员。例如:
class MyClass
{
public:
void func()
{
std::cout << "value is " << value << std::endl;
}
private:
int value = 10;
};
在上面的例子中,我们在类的私有部分定义了一个int类型的value变量,并将其赋初值为10。在公共成员函数func中,我们可以直接使用value打印输出它的值。
2. 访问其他成员函数
成员函数可以直接调用它自己的成员函数。例如:
class MyClass
{
public:
void func1()
{
std::cout << "This is func1" << std::endl;
func2();
}
void func2()
{
std::cout << "This is func2" << std::endl;
}
};
int main()
{
MyClass obj;
obj.func1();
return 0;
}
在上面的例子中,我们定义了两个公共成员函数func1和func2。在func1函数中,我们首先打印输出“This is func1”,然后调用了它自己的成员函数func2。
3. 可以被重载
成员函数可以像全局函数一样被重载。例如:
class MyClass
{
public:
void func()
{
std::cout << "This is func" << std::endl;
}
void func(int value)
{
std::cout << "The value is " << value << std::endl;
}
};
int main()
{
MyClass obj;
obj.func();
obj.func(100);
return 0;
}
在上面的例子中,我们定义了两个名字相同的函数func,它们都属于MyClass类的公共成员函数。在func(int value)函数中,我们添加了一个int类型的参数,用于接收调用时传递的参数。我们可以看到,在main函数中,我们先调用了不带参数的func函数,打印输出“This is func”,然后调用了带参数的func函数,并将参数传递给了它。
4. 可以访问对象特定的数据和函数
成员函数可以访问它们所属的对象的数据和函数,而这是全局函数无法做到的。例如:
class MyClass
{
public:
void func()
{
std::cout << "value is " << value << std::endl;
}
private:
int value;
};
int main()
{
MyClass obj1;
MyClass obj2;
obj1.value = 100;
obj2.value = 200;
obj1.func();
obj2.func();
return 0;
}
在上面的例子中,我们创建了两个MyClass对象obj1和obj2,并分别给它们的value成员变量设置了不同的值。在main函数中,我们先调用了obj1的func函数,打印输出obj1的value值,然后又调用了obj2的func函数,打印输出obj2的value值,这说明成员函数可以访问对象特定的数据和函数。
三、成员函数的使用技巧
除了上述基本特性,C++中的成员函数还有一些使用技巧。
1. const成员函数
const成员函数是一种不能修改类的数据成员的成员函数。对于const类型的对象,只能调用const成员函数。
例如:
class MyClass
{
public:
void func() const
{
std::cout << "This is const function" << std::endl;
}
};
int main()
{
MyClass obj;
const MyClass obj_const;
obj.func();
obj_const.func();
return 0;
}
在上面的例子中,我们定义了一个名为func的const成员函数,它在函数名后加上了const关键字。在main函数中,我们创建了一个非const的MyClass对象obj,和一个const的MyClass对象obj_const。我们可以看到,我们可以通过obj调用func函数,也可以通过obj_const调用func函数,这说明const成员函数可以同时被const和非const对象调用。
2. static成员函数
static成员函数是与类关联而不是与类的对象关联的函数。也就是说,它们不依赖于类的对象,并且可以直接使用类名和"."运算符来调用。
例如:
class MyClass
{
public:
static void func()
{
std::cout << "This is static function" << std::endl;
}
};
int main()
{
MyClass::func();
return 0;
}
在上面的例子中,我们定义了一个名为func的静态成员函数,它在函数名前加上了static关键字。在main函数中,我们可以直接使用类名MyClass和"."运算符调用func函数,打印输出“This is static function”。
3. 成员函数重载
成员函数可以像全局函数一样被重载,即函数名相同但参数列表不同。当我们调用成员函数时,编译器会自动选择与传递的参数类型最匹配的函数。
例如:
class MyClass
{
public:
void func(int a)
{
std::cout << "This is first func" << std::endl;
}
void func(double a)
{
std::cout << "This is second func" << std::endl;
}
};
int main()
{
MyClass obj;
obj.func(10);
obj.func(3.14);
return 0;
}
在上面的例子中,我们定义了两个名字相同但参数类型不同的func函数。在main函数中,我们调用了两次obj.func函数,并分别传递了一个int参数和一个double参数。我们可以看到,编译器根据传递的参数类型选择了不同的函数,打印输出“This is first func”和“This is second func”。
四、成员函数示例
我们可以通过一个简单的实例来演示成员函数的使用。
例如:
class Circle
{
public:
Circle(double r) : radius(r) {}
double getRadius() const
{
return radius;
}
double getArea() const
{
return 3.1415926 * radius * radius;
}
double getPerimeter() const
{
return 2 * 3.1415926 * radius;
}
private:
double radius;
};
int main()
{
Circle c1(2.5);
std:cout << "Radius is " << c1.getRadius() << std::endl;
std::cout << "Area is " << c1.getArea() << std::endl;
std::cout << "Perimeter is " << c1.getPerimeter() << std::endl;
return 0;
}
在上面的例子中,我们定义了一个Circle类,它包含一个名为radius的私有数据成员,和三个公共成员函数getRadius、getArea和getPerimeter,分别用于获取圆的半径、面积和周长。在main函数中,我们创建了一个半径为2.5的Circle对象c1,并通过各个成员函数访问了对象的半径、面积和周长,打印输出了对应的值。
总结
本文详细介绍了C++中成员函数的基本使用和特性,以及一些使用技巧和示例。成员函数是C++语言和OOP编程中重要的组成部分,在日常开发中应熟练掌握其使用方法,并善于运用成员函数来实现更复杂的功能。