C++/Class/Struct Class

Материал из C\C++ эксперт
Перейти к: навигация, поиск

add method to struct

<source lang="cpp">

  1. include <iostream>
  2. include <string.h>

using namespace std; struct Msg {

 char message[256];
 void show_message(void); 

};

struct UpperMsg {

  char message[256];
  void show_message(void); 

};

void Msg::show_message(void) {

  cout << message;

} void UpperMsg::show_message(void) {

  cout << strupr(message);

} int main(void) {

  Msg book = { "C\n" };
  UpperMsg book_upr = { "P\n" };
  book.show_message();
  book_upr.show_message();

}


 </source>


Classes and Structures are Related

<source lang="cpp">

  1. include <iostream>

using namespace std; struct MyClass {

 int get_i(void); // these are public by default  
 void put_i(int j); 

private:

 int i;  

} ;

int MyClass::get_i(void) {

 return i;  

}

void MyClass::put_i(int j) {

 i = j;  

}

main(void) {

 MyClass s;  
    
 s.put_i(10);  
 cout << s.get_i();  
    
 return 0;  

}


 </source>


Constructor and destructor inside a struct

<source lang="cpp">

  1. include <iostream>
  2. include <cstring>
  3. include <cstdlib>

using namespace std; struct StringClass {

 StringClass(char *ptr);
 ~StringClass();
 void show();

private:

 char *p;
 int len;

}; StringClass::StringClass(char *ptr) {

 len = strlen(ptr);
 p = (char *) malloc(len+1);
 if(!p) {
   cout << "Allocation error\n";
   exit(1);
 }
 strcpy(p, ptr);

} StringClass::~StringClass() {

 cout << "Freeing p\n";
 free(p);

} void StringClass::show() {

 cout << p << " - length: " << len;
 cout << endl;

} int main() {

 StringClass stringObject1("www.java2s.com."), stringObject2("www.java2s.com.");
 stringObject1.show();
 stringObject2.show();
 return 0;

}


 </source>


Stack class using a structure.

<source lang="cpp">

  1. include <iostream>

using namespace std;

  1. define SIZE 10

struct stack {

 stack();            
 void push(char ch); 
 char pop();         

private:

 char stackData[SIZE]; 
 int topOfStack;       

}; stack::stack() {

 cout << "Constructing a stack\n";
 topOfStack = 0;

} void stack::push(char ch) {

 if(topOfStack==SIZE) {
   cout << "Stack is full\n";
   return;
 }
 stackData[topOfStack] = ch;
 topOfStack++;

} char stack::pop() {

 if(topOfStack==0) {
   cout << "Stack is empty\n";
   return 0; // return null on empty stack 
 }
 topOfStack--;
 return stackData[topOfStack];

} int main() {

 stack stackObject1, stackObject2; 
 int i;
 stackObject1.push("a");
 stackObject2.push("x");
 stackObject1.push("b");
 stackObject2.push("y");
 stackObject1.push("c");
 stackObject2.push("z");
 for(i = 0; i <3; i++) 
    cout << "Pop stackObject1: " << stackObject1.pop() << endl;
 for(i = 0; i <3; i++) 
    cout << "Pop stackObject2: " << stackObject2.pop() << endl;
 return 0;

}


 </source>


use struct to initialize a class

<source lang="cpp">

  1. include <iostream>
  2. include <string.h>

using namespace std; struct BookInfo {

 char title[64];
 char publisher[64];
 char author[64];
 float price;
 int pages;

}; class BookStuff {

 public:
   BookStuff(char *title, char *publisher, char *author);
   BookStuff(struct BookInfo);
   void show_book(void) 
 { cout << "Book: " << title << " by " <<
       author << endl << "Publisher: " << publisher << endl; };
 private:
   char title[64];
   char author[64];
   char publisher[64];

}; BookStuff::BookStuff(char *title, char *publisher, char *author)

{
  strcpy(BookStuff::title, title);
  strcpy(BookStuff::publisher, publisher);
  strcpy(BookStuff::author, author);
}

BookStuff::BookStuff(BookInfo book) {

  strcpy(BookStuff::title, book.title);
  strcpy(BookStuff::publisher, book.publisher);
  strcpy(BookStuff::author, book.author);

} int main(void) {

  BookInfo book = {"T", "J", "a", 29.95, 256 };
  BookStuff big_book("C", "P","K");
  BookStuff little_book(book);
  big_book.show_book();
  little_book.show_book();

}


 </source>


Using a class instead of struct.

<source lang="cpp">

  1. include <iostream>

using namespace std; class MyClass {

 int i;// private by default  

public:

 int get_i(void);  
 void put_i(int j);  

} ;

int MyClass::get_i(void) {

 return i;  

}

void MyClass::put_i(int j) {

 i = j;  

}

main(void) {

 MyClass s;  
    
 s.put_i(10);  
 cout << s.get_i();  
    
 return 0;  

}


 </source>


Using a structure to define a class.

<source lang="cpp">

  1. include <iostream>
  2. include <cstring>

using namespace std; struct StringStructClass {

 void initString(char *s); // public
 void displayString();

private: // private

 char str[255];

} ; void StringStructClass::initString(char *s) {

 if(!*s) 
     *str = "\0"; // initialize string
 else 
     strcat(str, s);

} void StringStructClass::displayString() {

 cout << str << endl;

} int main() {

 StringStructClass stringObject;
 stringObject.initString("");          
 stringObject.initString("Hello ");
 stringObject.initString("there!");
 stringObject.displayString();
 return 0;

}


 </source>