Я только начал изучать c++, и сейчас я пытаюсь использовать объектно-ориентированное программирование. Я прочитал из других статей, что мне нужно создать класс заголовка для файла с функцией и включить его во все файлы с помощью этой функции. Однако всякий раз, когда я пытаюсь поместить функцию в пробелы кода, но она не работает должным образом. Моя функция использует метод sqrt для math.h, чтобы квадратный корень вводить число I. Я знаю, что могу просто использовать это в main(), но я хотел проверить OOP. Когда я использую sqrt в основном методе, который работает моя программа, но когда я помещаю его в другой файл, моя программа выплескивает тот же номер, который я вставляю. Heres my Code
Source.cpp
#include <iostream>
#include "Source2.h"
int main(){
using namespace std;
cout << "Please enter the number you want to root." << endl;
int x;
cin >> x;
function1(x);
cout << x;
}
Source2.cpp
#include <math.h>
int function1(int n){
int sqrt(n);
return n;
}
Source2.h
#ifndef _SOURCE2_H
#define _SOURCE2_H
int function1(int n);
#endif
Этот код работает не так, как предполагалось. так что вы можете назвать это ошибкой, которую у меня есть. Если вы вводите число, равное 4, моя программа должна дать квадратный корень, который равен 2. Помощь будет принята с благодарностью. благодаря
Моя функция использует метод sqrt для math.h, чтобы квадратный корень вводить число I.
Нет, нет.
Он объявляет int
называемый sqrt
, инициализированный значением n
, а затем незамедлительно игнорирует этот новый int
.
int sqrt(n); // this is the same as 'int sqrt = n;'
return n;
Ты имел ввиду:
return sqrt(n);
Таким образом, это не имеет ничего общего с "другими файлами" или что-то в этом роде: вы просто не можете называть sqrt
из-за опечатки синтаксиса.
Аналогично, когда вы вызываете function1
, вы ничего не делаете с результатом.
function1(x);
Вместо этого напишите:
x = function1(x);
Вам также следует знать, что это не объектно-ориентированное программирование.
sqrt
; это причина, чтобы исследовать эту проблему самостоятельно. Программирование угадыванием не работает!
Это не является объектно-ориентированным программированием в этом примере, но это должно исправить эту функцию:
int function1(int n){
n = sqrt(n);
return n;
}
sqrt RETURNS значение, оно не изменяет переданное значение, поэтому вам нужно где-то сохранить это значение. Я решил повторно использовать n
здесь.
И главное:
int main(){
using namespace std;
cout << "Please enter the number you want to root." << endl;
int x;
cin >> x;
x = function1(x);
cout << x;
}
Опять же, function1()
возвращает значение, поэтому его необходимо сохранить. В настоящий момент все main()
возвращает значение возвращаемого вами значения.
Это должно работать,
source2.h
#ifndef _SOURCE2_H
#define _SOURCE2_H
#include <math.h>
// Class Definition - Object Oriented Programming
class MyClass
{
public:
// Function Definition - Get the Sqrt
double function1(double n);
};
#endif
source2.cpp
#include "source2.h"
// Referencing the function inside the class
double MyClass :: function1(double n){
double a = sqrt(n);
return a;
}
source.cpp
#include <iostream>
#include "Source2.h"
using namespace std;
int main(){
int x;
cout << "Please enter the number you want to root." << endl;
cin >> x;
cout << "The number entered is " << x << " And the sq rt of the same is ";
MyClass c; // Create an instance of MyClass , OOPS
cout << c.function1(x);
return 0; // Success Condition
}
Не стесняйтесь задавать мне какие-либо вопросы. Это минимальный C++ код, который я мог бы придумать для ваших требований. Пройдите комментарии выше, они ценны с точки зрения понимания.
Вы не используете результат function
. Попробуйте x = function1(x);
или cout << function1(x);
,
Проблема, с которой вы сталкиваетесь, заключается в том, что вы не вызываете sqrt (n). Документация для sqrt находится здесь: http://www.cplusplus.com/reference/cmath/sqrt/
В основном то, что вы делаете в Source2.cpp, называется sqrt (n), но ничего не улавливает возвращаемое значение. Что вы хотите сделать:
int function1(int n)
{
int result = sqrt(n);
return result;
}
Надеюсь, я помог!
sqrt
!