友元函数,析构函数,静态成员不能声明为虚函数的理由
时间: 2024-06-04 22:10:41 浏览: 13
友元函数是在类外定义的函数,不属于类的成员函数,因此不存在虚函数的概念。
析构函数是用来释放对象所占用的内存空间的函数,它只能被调用一次,因此不需要虚函数的特性。
静态成员是属于类的,而不是属于对象的。虚函数是针对对象的,因此静态成员函数不需要虚函数的特性。同时,静态成员函数不会被继承,因此也不需要虚函数的特性。
相关问题
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
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)