Difference between revisions of "Interview Questions(OOP)"
(→Virtual const) |
(→Public Private Protected) |
||
(One intermediate revision by the same user not shown) | |||
Line 15: | Line 15: | ||
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 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> | 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> | </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; }