c++学习记录(五)
c++实践学习友元、构造、析构函数
参考文献 菜鸟教程
友元函数
类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员
构造函数
构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。
析构函数
析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数
实践要求:
(1)在代码中运用三个函数
(2)尝试一些不同的操作
代码展示
#include<iostream>
using namespace std;
class Try
{
public:
Try()
{
cout << "测试友元函数以及构造、析构函数使用" << endl;
length = 0;
height = 0;
weight = 0;
}
~Try()
{
cout << "测试结束" << endl;
}
friend void print(Try try2);
void print2()
{
length += 5;
weight += 3;
height += 6;
cout << "长宽高之积:" << length * height * weight << endl;
}
private:
int length;
int height;
int weight;
};
void print(Try try2)
{
try2.length += 5;
try2.weight += 3;
try2.height += 6;
cout << "长宽高之积:" << try2.length * try2.height * try2.weight << endl;
}
int main()
{
Try try2;
print(try2);
try2.print2();
}
不同的操作
(1)将友元函数在类中声明并定义
class Try
{
public:
friend void print(Try try2)
{
length += 5;
weight += 3;
height += 6;
cout << "长宽高之积:" << length * height * weight << endl;
}
};
结论:能成功定义输出
(2)将友元函数只在类中声明,在类外定义
class Try
{
public:
friend void print(Try try2);
};
void print(Try try2)
{
length += 5;
weight += 3;
height += 6;
cout << "长宽高之积:" << length * height * weight << endl;
}
结论:能成功定义输出
实践中出现的问题
(1)声明类的对象时,例如定义class Try,再声明对象Try try;出现错误
结论:推迟原因可能为try是c++中的关键字,因此出现错误
(2)友元函数、类成员函数对类中成员进行操作似乎不会相互影响
【1】友元函数与类成员函数实践
void print2() //类成员函数
{
length += 4;
weight += 5;
height += 6;
cout << "长宽高之积:" << length * height * weight << endl;
}
friend void print(Try try2) //友元函数
{
length += 4;
weight += 5;
height += 6;
cout << "长宽高之积:" << length * height * weight << endl;
}
在main函数中调用结果
【2】两个类成员函数实践
void print2() //类成员函数
{
length += 4;
weight += 5;
height += 6;
cout << "长宽高之积:" << length * height * weight << endl;
}
void print3()
{
length += 4;
weight += 5;
height += 6;
cout << "长宽高之积:" << length * height * weight << endl;
}