析构函数,构造函数,静态函数,友元函数
时间: 2024-08-12 10:09:54 浏览: 68
在面向对象编程中,有几种关键的成员函数,它们各自负责不同的职责:
1. **构造函数**(Constructor):这是一个特殊的成员函数,用于对象的初始化。当一个新的对象被创建时,构造函数会被自动调用,用来设置默认值或执行必要的初始化步骤。构造函数没有返回类型,且通常名字与类名相同。
2. **析构函数**(Destructor):与构造函数相反,析构函数在对象不再被使用或生命周期结束时被自动调用,用于清理资源、解除对象间的引用等。析构函数有一个特殊的名称(通常是类名后加`~`),没有参数,也没有返回类型。
3. **静态函数**(Static Function):这种函数不属于任何特定的对象实例,而是属于整个类。静态函数可以直接通过类名调用,无需创建对象实例。它们通常用于提供类的工具方法,或者是与类的状态无关的辅助功能。
4. **友元函数**(Friend Function):不是类的成员,但可以访问类的私有和保护成员,就像类的一部分一样。友元函数增强了类的功能,但增加了代码复杂性和潜在的安全风险,因此应谨慎使用。
相关问题:
1. 析构函数的主要作用是什么?
2. 静态函数与普通成员函数有何区别?
3. 如何声明一个函数为友元函数?
相关问题
c++编写程序要包括类、对象、构造函数、析构函数、静态变量、静态成员函数、对象数组、对象指针、对象引用、友元函数、友元类
好的,我可以为您简单介绍一下这些概念。
1. 类:C++中类是一种自定义数据类型,可以封装数据和函数。类的定义包括类名、数据成员、成员函数等。
2. 对象:类的实例化对象,可以调用类中定义的成员函数和访问数据成员。
3. 构造函数:在对象创建时自动调用,用于初始化对象的数据成员。
4. 析构函数:在对象销毁时自动调用,用于释放对象占用的资源。
5. 静态变量:静态变量在程序运行期间只被初始化一次,不随对象的创建而改变。
6. 静态成员函数:属于类而非对象的函数,可以访问静态变量但不能访问非静态变量。
7. 对象数组:可以定义一个存储多个对象的数组。
8. 对象指针:指向对象的指针,可以调用对象的成员函数和访问数据成员。
9. 对象引用:对象的别名,可以调用对象的成员函数和访问数据成员。
10. 友元函数:可以访问类的私有成员,但不是类的成员函数。
11. 友元类:可以访问类的私有成员,是另一个类的成员函数。
希望这些概念可以帮助您更好地理解C++中的面向对象编程。
c++编写一个程序,程序要包括类、对象、构造函数、析构函数、静态变量、静态成员函数、对象数组、对象指针、对象引用、友元函数、友元类
下面是一个使用 C++ 编写的程序,其中包括了类、对象、构造函数、析构函数、静态变量、静态成员函数、对象数组、对象指针、对象引用、友元函数、友元类的使用:
```c++
#include <iostream>
using namespace std;
class Person{
private:
static int count; // 静态变量
int age;
public:
Person(int age){ // 构造函数
this->age = age;
count++;
}
~Person(){ // 析构函数
count--;
}
static int getCount(){ // 静态成员函数
return count;
}
friend void printAge(Person p); // 友元函数
friend class Student; // 友元类
};
int Person::count = 0;
void printAge(Person p){
cout << "Age: " << p.age << endl;
}
class Student{
public:
void printAgeOfPerson(Person p){
cout << "Age: " << p.age << endl;
}
};
int main(){
Person p1(18);
Person p2(20);
cout << "Count: " << Person::getCount() << endl; // 静态成员函数的使用
printAge(p1); // 友元函数的使用
Student s;
s.printAgeOfPerson(p2); // 友元类的使用
Person arr[3] = {Person(21), Person(22), Person(23)}; // 对象数组的使用
for(int i = 0; i < 3; i++){
cout << "Age of person " << i+1 << ": " << arr[i].age << endl;
}
Person* p3 = new Person(24); // 对象指针的使用
cout << "Age of person p3: " << p3->age << endl;
delete p3;
Person& p4 = p2; // 对象引用的使用
cout << "Age of person p4: " << p4.age << endl;
return 0;
}
```
在上面的程序中,我们定义了一个 `Person` 类,其中包括了静态变量 `count`、构造函数、析构函数、静态成员函数 `getCount()`,以及一个友元函数 `printAge()` 和一个友元类 `Student`。
在 `main()` 函数中,我们首先创建了两个 `Person` 对象 `p1` 和 `p2`,并使用静态成员函数 `Person::getCount()` 输出了当前 `Person` 对象的数量。
然后,我们使用了友元函数 `printAge()` 和友元类 `Student` 分别输出了 `p1` 和 `p2` 对象的年龄。
接着,我们定义了一个 `Person` 对象数组 `arr`,并对其进行了初始化,并使用了一个 `for` 循环遍历数组并输出了每个 `Person` 对象的年龄。
然后,我们创建了一个 `Person` 对象指针 `p3`,并使用 `new` 运算符动态分配了内存,并输出了 `p3` 对象的年龄,并使用 `delete` 运算符释放了 `p3` 对象的内存。
最后,我们定义了一个 `Person` 对象引用 `p4`,并将其初始化为 `p2`,并输出了 `p4` 对象的年龄。
输出结果如下:
```
Count: 2
Age: 18
Age: 20
Age: 21
Age: 22
Age: 23
Age of person p3: 24
Age of person p4: 20
```
阅读全文