User Tools

Site Tools


cpp:function_templates

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cpp:function_templates [2019/05/04 04:32] – [Templates συναρτήσεων με παραμέτρους σύνθετους τύπους (κλάσεις)] gthanoscpp:function_templates [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 26: Line 26:
  
 Ας προσπαθήσουμε να χρησιμοποιήσουμε την παραπάνω συνάρτηση. Ας προσπαθήσουμε να χρησιμοποιήσουμε την παραπάνω συνάρτηση.
-<code cpp maximum1.cpp>+<code cpp find_max1.cpp>
 template <typename T> template <typename T>
 T& maximum(T& a, T& b) { return (a>b?a:b); } T& maximum(T& a, T& b) { return (a>b?a:b); }
Line 47: Line 47:
 <WRAP tip 80% center round> <WRAP tip 80% center round>
 Μπορείτε να παραλείψετε τον τύπο των παραμέτρων κατά την κλήση της συνάρτησης **maximum** ως εξής: Μπορείτε να παραλείψετε τον τύπο των παραμέτρων κατά την κλήση της συνάρτησης **maximum** ως εξής:
-<code cpp maximum1.cpp>+<code cpp find_max1.cpp>
 template <typename T> template <typename T>
 T& maximum(T& a, T& b) { return (a>b?a:b); } T& maximum(T& a, T& b) { return (a>b?a:b); }
Line 66: Line 66:
 ===== Templates συναρτήσεων με παραμέτρους σύνθετους τύπους (κλάσεις) ===== ===== Templates συναρτήσεων με παραμέτρους σύνθετους τύπους (κλάσεις) =====
  
-Ας υποθέσουμε ότι θέλουμε να κάνουμε χρήση της παραπάνω συνάρτηση **maximum** προκειμένου να βρούμε το μέγιστο μεταξύ δύο φοιτητών. Η κλάση του φοιτητή δίνεται παρακάτω:+Ας υποθέσουμε ότι θέλουμε να κάνουμε χρήση της παραπάνω συνάρτηση **maximum** προκειμένου να βρούμε το μέγιστο μεταξύ δύο φοιτητών. Η κλάση //Student// του φοιτητή δίνεται στην προηγούμενη ενότητα:
  
-<code cpp Student.hpp+Εφόσον προσθέσουμε την παραπάνω συνάρτηση υπεφόρτωσης του τελεστή %%>%% το πρόγραμμα εκτυπώνει τα εξής: 
-#include<cstring>+<code cpp find_max2.cpp
 +#include <iostream> 
 +#include "Student.hpp" 
 +using namespace std;
  
-#ifndef _STUDENT_H_ +template <typename T> 
-#define _STUDENT_H_+T& maximum(T& a, T& b) { return (a>b?a:b); }
  
-class Student { +int main() { 
-  char *name; + Student george("George"1234), kate("Kate"4321);
-  int aem; +
-   +
-public: +
-  Student(const char *name, int aem); +
-  Student(); +
-  Student(const Student& ); +
-  Student(const Student* ); +
-  ~Student(); +
-  char *getName() const; +
-  int getAEM() const; +
-  void setName(const char *name); +
-  void setAEM(int aem); +
-  friend std::ostream& operator<<(std::ostream& out, const Student & st); +
-  bool operator>(const Student& st) const; +
-  Student& operator=(const Student& st); +
-}; +
- +
-Student::Student(const char *name, int aem) { +
-  this->name = new char [strlen(name) + 1]; +
-  strcpy(this->name, name); +
-  this->aem = aem; +
-+
- +
-Student::Student(const Student& st) { +
-  name = new char [strlen(st.name) + 1]; +
-  strcpy(namest.name)+
-  aem = st.aem; +
-+
- +
-Student::Student(const Student* st) { +
-  name = new char [strlen(st->name) + 1]; +
-  strcpy(namest->name); +
-  aem = st->aem; +
-+
- +
-Student::Student() { +
-  this->name = nullptr; +
-  this->aem = 0; +
-+
- +
-Student::~Student() { +
-  if(name != nullptr) +
-    delete []name; +
-+
- +
-char* Student::getName() const { +
-  return name; +
-+
- +
-int Student::getAEM() const { +
-  return aem; +
-+
- +
-void Student::setName(const char *name) { +
-  if(this->name != nullptr) +
-    delete this->name; +
-  this->name = new char [strlen(name) + 1]; +
-  strcpy(this->namename); +
-+
- +
-void Student::setAEM(int aem) { +
-  this->aem = aem; +
-+
- +
-Student& Student::operator=(const Student& st) { +
-  if(name != nullptr) +
-    delete name; +
-  name = new char [strlen(st.name) + 1]; +
-  strcpy(name, st.name); +
-  aem = st.aem; +
-  return *this; +
-+
- +
-std::ostream& operator<<(std::ostream& out, const Student& st) { +
-  out << st.name << " " << st.aem; +
-  return out; +
-}+
  
-bool Student::operator>(const Student& stconst { + cout << "max('George','Kate'): " << maximum(george, kate<< endl;
-  if(aem > st.aem) +
-    return true; +
-  return false;+
 } }
-#endif 
-</code> 
- 
-Εφόσον προσθέσουμε την παραπάνω συνάρτηση υπεφόρτωσης του τελεστή **<**το πρόγραμμα εκτυπώνει τα εξής: 
-<code> 
-max('George','Kate'): Kate 12345 
 </code> </code>
  
Line 185: Line 102:
  
 Ο κώδικας χρήσης της παραπάνω συνάρτησης θα μπορούσε να είναι ο εξής: Ο κώδικας χρήσης της παραπάνω συνάρτησης θα μπορούσε να είναι ο εξής:
-<code cpp maximum3.cpp>+<code cpp find_max3.cpp>
 #include <iostream> #include <iostream>
 using namespace std; using namespace std;
 +
 +#include "Student.hpp"
  
 template <typename T, int size> template <typename T, int size>
Line 197: Line 116:
   return max;   return max;
 } }
- 
-#include "Student.hpp" 
  
 int main() { int main() {
cpp/function_templates.1556944336.txt.gz · Last modified: 2019/05/04 03:32 (external edit)