zoukankan      html  css  js  c++  java
  • 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;
    	}
    
    

    两个类成员函数结果显示

    结论:推测友元函数与类成员函数对类中成员的操作互不影响,具体还等以后查找资料

    总结:了解了c++的一些基础知识,还有大量的细节知识需要在实践中发现并处理。

  • 相关阅读:
    CSS3 @fontface实现颜色大小可控的三角效果
    html5 canvas之绘制曲线
    li内文字超出隐藏,不允许出现半汉字截断,超出后仍显示new图片,小于宽度自动跟随
    告别图片—使用字符实现兼容性的圆角尖角效果beta版
    常用JQuery插件整理
    获取不到header的自定义参数的值
    mavenresourcesproduction:xxxx: java.lang.NegativeArraySizeException
    Cannot find module '@babel/core'
    C# Set集合
    关于tomcat部署web服务方式
  • 原文地址:https://www.cnblogs.com/trainking-star/p/12267158.html
Copyright © 2011-2022 走看看