Difference between revisions of "Interview Questions(OOP)"
(Created page with "==Object-oriented programming interview questions==") |
(→Public Private Protected) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
==Object-oriented programming interview questions== | ==Object-oriented programming interview questions== | ||
+ | ===Encapsulation=== | ||
+ | restricting access to some of the object's components<br> | ||
+ | bundling of data with the methods<br> | ||
+ | public and private data and methods.<br> | ||
+ | A benefit of encapsulation is that it can reduce system complexity, and thus increases robustness, reduce risk of conflict between components.<br> | ||
+ | === Polymorphism === | ||
+ | In C++, that type of polymorphism is called overloading. | ||
+ | If a class has inherited a parent class, it can redefine a method and thus each class has a method with the same name but different functionality. | ||
+ | ===Inheritance=== | ||
+ | Inheritance is a way to reuse code of existing objects, establish a subtype from an existing object.<br> | ||
+ | Allow replace the implementation of an inherited method or data.<br> | ||
+ | ===Public Private Protected=== | ||
+ | A member (either data member or member function) declared in a private section of a class can only be accessed by member functions and friends of that class<br> | ||
+ | A member (either data member or member function) declared in a protected section of a class can only be accessed by member functions and friends of that class, and by member functions and friends of derived classes<br> | ||
+ | A member (either data member or member function) declared in a public section of a class can be accessed by anyone<br> | ||
+ | ===Design Texas poker=== | ||
+ | <pre class="brush:c"> | ||
+ | #include "stdafx.h" | ||
+ | #include <iostream> | ||
+ | #include <stdio.h> | ||
+ | #include <vector> | ||
+ | #include <string.h> | ||
+ | #include <ctime> | ||
+ | using namespace std; | ||
+ | struct Card{ | ||
+ | enum suits{ | ||
+ | spades, | ||
+ | hearts, | ||
+ | clubs, | ||
+ | diamonds | ||
+ | }; | ||
+ | int suit; | ||
+ | int rank; | ||
+ | Card(int s, int r){ | ||
+ | suit=s; | ||
+ | rank=r; | ||
+ | }; | ||
+ | string toString(){ | ||
+ | char c[10]; | ||
+ | sprintf(c,"(%d,%d)",suit,rank); | ||
+ | string s(c); | ||
+ | return s; | ||
+ | } | ||
+ | }; | ||
+ | template <class t> | ||
+ | void MySwap(t &a,t &b){ | ||
+ | t tmp=a; | ||
+ | a=b; | ||
+ | b=tmp; | ||
+ | }; | ||
+ | struct Deck{ | ||
+ | vector<Card> deck; | ||
+ | Deck(){ | ||
+ | newDeck(); | ||
+ | } | ||
+ | void newDeck(){ | ||
+ | deck.clear(); | ||
+ | for(int j=0;j<4;j++){ | ||
+ | for(int i=1;i<=13;i++){ | ||
+ | deck.push_back(Card(j,i)); | ||
+ | } | ||
+ | } | ||
+ | shuffle(); | ||
+ | } | ||
+ | void shuffle(){ | ||
+ | srand(time(NULL)); | ||
+ | for(int i=0;i<deck.size();i++){ | ||
+ | int r = rand()%deck.size(); | ||
+ | MySwap(deck[i],deck[rand()%deck.size()]); | ||
+ | } | ||
+ | } | ||
+ | Card drawOne(){ | ||
+ | Card ret = deck[deck.size()-1]; | ||
+ | deck.pop_back(); | ||
+ | return ret; | ||
+ | } | ||
+ | string toString(){ | ||
+ | string s; | ||
+ | for(int i=0;i<deck.size();i++){ | ||
+ | s+=deck[i].toString(); | ||
+ | } | ||
+ | return s; | ||
+ | } | ||
+ | }; | ||
+ | struct Hand{ | ||
+ | vector<Card> cards; | ||
+ | void add(Card c){ | ||
+ | cards.push_back(c); | ||
+ | } | ||
+ | void remove(int i){ | ||
+ | cards.erase(cards.begin()+i); | ||
+ | } | ||
+ | string toString(){ | ||
+ | string s; | ||
+ | for(int i=0;i<cards.size();i++){ | ||
+ | s+=cards[i].toString(); | ||
+ | } | ||
+ | return s; | ||
+ | } | ||
+ | }; | ||
+ | int _tmain(int argc, _TCHAR* argv[]) | ||
+ | { | ||
+ | Deck deck1; | ||
+ | Hand community; | ||
+ | Hand hand1; | ||
+ | Hand hand2; | ||
+ | deck1.drawOne(); //texas, drop one card at beginning | ||
+ | hand1.add(deck1.drawOne()); | ||
+ | hand1.add(deck1.drawOne()); | ||
+ | hand2.add(deck1.drawOne()); | ||
+ | hand2.add(deck1.drawOne()); | ||
+ | community.add(deck1.drawOne());//now draw 5 desk community cards | ||
+ | community.add(deck1.drawOne()); | ||
+ | community.add(deck1.drawOne()); | ||
+ | community.add(deck1.drawOne()); | ||
+ | community.add(deck1.drawOne()); | ||
+ | |||
+ | cout<<"Player 1: "<<hand1.toString().c_str()<<endl; | ||
+ | cout<<"Player 2: "<<hand2.toString().c_str()<<endl; | ||
+ | cout<<"Community: "<<community.toString().c_str()<<endl; | ||
+ | cout<<"Deck"<<deck1.toString().c_str()<<endl; | ||
+ | return 0; | ||
+ | } | ||
+ | </pre> |
Latest revision as of 00:01, 4 January 2013
Contents
Object-oriented programming interview questions
Encapsulation
restricting access to some of the object's components
bundling of data with the methods
public and private data and methods.
A benefit of encapsulation is that it can reduce system complexity, and thus increases robustness, reduce risk of conflict between components.
Polymorphism
In C++, that type of polymorphism is called overloading. If a class has inherited a parent class, it can redefine a method and thus each class has a method with the same name but different functionality.
Inheritance
Inheritance is a way to reuse code of existing objects, establish a subtype from an existing object.
Allow replace the implementation of an inherited method or data.
Public Private Protected
A member (either data member or member function) declared in a private section of a class can only be accessed by member functions and friends of that class
A member (either data member or member function) declared in a protected section of a class can only be accessed by member functions and friends of that class, and by member functions and friends of derived classes
A member (either data member or member function) declared in a public section of a class can be accessed by anyone
Design Texas poker
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <vector> #include <string.h> #include <ctime> using namespace std; struct Card{ enum suits{ spades, hearts, clubs, diamonds }; int suit; int rank; Card(int s, int r){ suit=s; rank=r; }; string toString(){ char c[10]; sprintf(c,"(%d,%d)",suit,rank); string s(c); return s; } }; template <class t> void MySwap(t &a,t &b){ t tmp=a; a=b; b=tmp; }; struct Deck{ vector<Card> deck; Deck(){ newDeck(); } void newDeck(){ deck.clear(); for(int j=0;j<4;j++){ for(int i=1;i<=13;i++){ deck.push_back(Card(j,i)); } } shuffle(); } void shuffle(){ srand(time(NULL)); for(int i=0;i<deck.size();i++){ int r = rand()%deck.size(); MySwap(deck[i],deck[rand()%deck.size()]); } } Card drawOne(){ Card ret = deck[deck.size()-1]; deck.pop_back(); return ret; } string toString(){ string s; for(int i=0;i<deck.size();i++){ s+=deck[i].toString(); } return s; } }; struct Hand{ vector<Card> cards; void add(Card c){ cards.push_back(c); } void remove(int i){ cards.erase(cards.begin()+i); } string toString(){ string s; for(int i=0;i<cards.size();i++){ s+=cards[i].toString(); } return s; } }; int _tmain(int argc, _TCHAR* argv[]) { Deck deck1; Hand community; Hand hand1; Hand hand2; deck1.drawOne(); //texas, drop one card at beginning hand1.add(deck1.drawOne()); hand1.add(deck1.drawOne()); hand2.add(deck1.drawOne()); hand2.add(deck1.drawOne()); community.add(deck1.drawOne());//now draw 5 desk community cards community.add(deck1.drawOne()); community.add(deck1.drawOne()); community.add(deck1.drawOne()); community.add(deck1.drawOne()); cout<<"Player 1: "<<hand1.toString().c_str()<<endl; cout<<"Player 2: "<<hand2.toString().c_str()<<endl; cout<<"Community: "<<community.toString().c_str()<<endl; cout<<"Deck"<<deck1.toString().c_str()<<endl; return 0; }