gpt4 book ai didi

c++ - 如何编写两个初始化操作(一个作为默认初始化,另一个作为用户输入)?两者都是 C++ 中类的构造函数

转载 作者:行者123 更新时间:2023-11-27 23:21:14 26 4
gpt4 key购买 nike

我正在设计和实现一个类,我必须使用该类的构造函数包含两个初始化操作。一个是默认初始化(我认为我已经正确完成),另一个是来自用户输入的初始化,它应该在构造函数本身中(我仍然很难编写它)。我正在使用单独的编译,所以我显示了文件中的代码以及 .cpp 文件中的类和主要函数。我正在使用 Dev-C++,部分代码如下。感谢您的帮助。

#include <iostream>
#include <exception>
#include <math.h>


///#include "Exception.h"


#ifndef TRIANGLE_H
#define TRIANGLE_H

using namespace std;

class Triangle

{
private:
double side1;
double side2;
double side3;

double angle_side1_side2;
double angle_side1_side3;
double angle_side2_side3;


public:
//default constructor with default initialization
Triangle::Triangle(): side1(0), side2(0), side3(0), angle_side1_side2(0), angle_side1_side3(0), angle_side2_side3(0)
{

}

//constructor with user inputs, but I know there is something wrong...
Triangle::Triangle(double s1, double s2, double s3)
{
cout<<"enter your own values:"<<endl;
cin>>s1>>s2>>s3;
side1=s1;
side2=s2;
side3=s3;
cout<<"the current lengths of sides of your triangle are: " <<endl;
}

double display_triangle_sides()
{
cout<<side1<<" "<<side2<<" "<<side3<<" ";

}

double display_triangle_Area()
{
double S=(side1+side2+side3)/2; //semiperimeter
double T=sqrt(S*(S-side1)*(S-side2)*(S-side3)); //Heron formula to calculate Area of triangle

return T;
}
};

endif


//*****************************main function below************************

#include <iostream>
#include <exception>



#include "Untitled1.h"


using namespace std;

int main()
{


Triangle tr;


cout<<" length of each side of the current triangle : ";
tr.display_triangle_sides(); //I want to show here the values entered by the users



cout<<endl<<"Here is the Area of the current triangle : " << tr.display_triangle_Area()<<endl;
cout<<"type of triangle:"<<endl;
tr.Type_of_Triangle();


system("Pause");
return 0;
}

最佳答案

用户必须手动输入值的构造函数是令人震惊的设计。您确定有人告诉您这样做吗?

正确的做法是这样的

class Triangle
{
Triangle::Triangle(): side1(0), side2(0), side3(0)
{
}

Triangle::Triangle(double s1, double s2, double s3) : side1(s1), side2(s2), side3(s3)
{
}

...

};

int main()
{
double s1, s2, s3;
cin >> s1 >> s2 >> s3;
Triangle t(s1, s2, s3);

...

}

换言之,您在主函数中输入值,然后将值传递给构造函数。

你做事的方式如此糟糕的原因是它使你的 Triangle 构造函数只能在你现在编写的程序的特定上下文中使用。您应该设计您的类,以便它们可以在不同的程序中重用。对于刚刚开始的您来说,现在可能很难理解这一点,因为您只专注于让一个程序运行,而不是考虑您将来可能编写的程序。

如果你真的被告知你必须这样做,那么你就是被一个无能的人教的。

关于c++ - 如何编写两个初始化操作(一个作为默认初始化,另一个作为用户输入)?两者都是 C++ 中类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12853934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com