Difference between revisions of "Interview Questions(OOP)"

From Hawk Wiki
Jump to: navigation, search
(Object-oriented programming interview questions)
(Public Private Protected)
 
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>

Latest revision as of 00:01, 4 January 2013

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;
}