பல்லுருவாக்கம் | கணினி அறிவியல் - பின்வரும் கேள்விகளுக்கு பதில் அளிக்கவும் | 11th Computer Science : Chapter 15 : Polymorphism
C++ பொருள்
நோக்கு நிரலாக்க மொழி
பல்லுருவாக்கம்
பகுதி - ஆ
குறு வினாக்கள்
1. செயற்கூறு பணிமிகுப்பு என்றால் என்ன?
விடை: செய்தி அல்லது
தரவினை ஒன்றுக்கு மேற்பட்ட வடிவங்களில் செயலாக்கவல்ல செயற்கூறின் திறனையே செயற்கூறு
பணிமிகுப்பு என்கிறோம்.
2. பணிமிகுக்க
முடியாத செயற்குறிகளைப் பட்டியலிடுக.
விடை:
(i) வரையெல்லை செயற்குறி (::)
(ii) செயற்குறி (sizeof)
(iii) உறுப்பு தேர்வி (member selector - .)
(iv) உறுப்பு சுட்டல் தேர்வி (member pointer selector - *)
(v) மும்ம செயற்குறி (ternary operator - ?:)
3. class add{int x; public: add(int)}; இனக்குழுவின்
வெளியே ஆக்கி வரையறுப்பை எழுதுக.
விடை:
add : : add (int y)
{
y=x ;
}
4. ஒரு செயற்கூறின் திருப்பி அனுப்பும்
தரவினம் செயற்கூறு பணிமிகுப்பிற்கு உதவுமா?
விடை: ஒரு செயற்கூறின் திருப்பி அனுப்பும் ஒரு தரவினம் செயற்கூறு பணிமிகுப்பிற்கு
உதவாது.
5. ஒரு செயற்கூறு பணிமிகுப்பின் பயன்
யாது?
விடை:
(i) செயற்கூறு பணி மிகுப்பு, பல்லுருவாக்கத்தை மட்டுமே நடைமுறைப்படுத்தாமல் ஓர் நிரலில் ஒப்பீடுகளின்
எண்ணிக்கையைக் குறைத்து, நிரல் வேகமாக செயல்பட உதவுகிறது.
(ii) நிரலர், அதிக செயற்கூற்றின் பெயர்களை நினைவில் வைத்துக் கொள்வதை தவிர்க்க வழி செய்கிறது.
பகுதி - இ
சிறு வினாக்கள்
1. செயற்கூறு பணிமிகுப்பிற்கான விதிமுறைகள்
யாவை?
விடை:
(i) பணிமிகுத்த செயற்கூறுகள் முறையான அளபுருக்களின் எண்ணிக்கையிலோ, அல்லது அவற்றின் தரவு இனங்களிலோ
வேறுபட்டிருக்க வேண்டும்.
(ii) பணிமிகுத்த செயற்கூறுகள் திருப்பியனுப்பும் தரவினம் ஒன்றாக இருக்க வேண்டும் என்ற தேவையில்லை.
(iii) பணிமிகுத்த செயற்கூறுகளின் தானமைவு செயலுருபுகளை அளபுருக்களின் பட்டியலில் ஒரு பகுதியாக C++ நிரல் பெயர்ப்பி கருதிக் கொள்ளாது.
2. பல செயற்கூறுகள் இருக்கும்போது,
நிரல் பெயர்ப்பி அவற்றுள் எந்த செயற்கூறினை செயல்படுத்த
வேண்டும் என்பதை எப்படி தீர்மானிக்கும்? எ.கா.தருக.
விடை:
செயற்கூறின் அளபுருக்களின் எண்ணிக்கை மற்றும் தரவினங்களை
செயற்கூறு முன்வடிவு என்கிறோம். பணி மிகுக்கப்பட்ட செயற்கூறினை அழைக்கும்போது, நிரல் பெயர்ப்பி மிகச் சரியான
வரையறுப்பை, அழைக்கப்பட்ட செயற்கூறின் அளபுருக்களின் வகையோடு வரையறுக்கப்பட்ட செயற்கூறின்
செயலுருபுகளின் வகையோடு ஒப்பிட்டு தீர்மானிக்கும்.
எடுத்துக்காட்டு:
float area (float radius);
float area (float half, float base, float
height);
float area (float length, float breadth);
3. செயற்குறி பணிமிகுப்பு என்றால் என்ன? பணிமிகுப்பு செய்யக்கூடிய செயற்குறிகளுள்
சிலவற்றை கூறு.
விடை:
ஒரு செயற்குறிக்குப் புதிய பொருளை வழங்கும் தொழில்நுட்பமே
செயற்குறி பணிமிகுப்பு என்றழைக்கப்படுகிறது.
எடுத்துக்காட்டு : பணிமிகுப்பு செய்ய கூடிய செயற்குறிகள்
சில
+,++,−,− −, +=, −=, *, <,>
4. ஆக்கியை பணிமிகுத்தலால் விளையும்
நன்மைகளைப் பற்றி விவாதிக்கவும்.
விடை:
(i) ஓர் இனக்குழுவிற்கு, பல்வேறு வகையான பொருள்களை உருவாக்க ஆக்கி பணிமிகுப்பு வழி வகை செய்கிறது.
(ii) ஆக்கிகள் பல இடம் பெற்றிருப்பதால், ஒரு பொருள் உருவாக்கப்படும் போதே செயலுருபுகள் அவற்றிற்கு அனுப்பி வைக்கப்பட வேண்டும்.
5. class sale (int cost, discount;public: sale(sale &);
குறிப்பிட்ட செயற்கூறினுக்கு ஒரு
inline அல்லாத வரையறுத்தலை எழுது.
விடை:
sale :: sale (sale &s)
{
cost = s.cost;
discount = s.discount;
}
பகுதி - ஈ
பெரு வினாக்கள்
1. செயற்குறி பணிமிகுப்பிற்கான விதிமுறைகள்
யாவை?
விடை:
செயற்குறி பணிமிகுப்பினை நடைமுறைப்படுத்தும் போது
பின்வரும் வரம்பெல்லைகளைக் கவனத்தில் கொள்ள வேண்டும்.
(i) ஒரு செயற்குறியின்
முன்னுரிமையும், திசை முகத்தையும் மாற்ற இயலாது.
(ii) புதிய செயற்குறிகளை உருவாக்க முடியாது. ஏற்கனவே இருக்கும் செயற்குறிகளை
மட்டுமே பணிமிகுக்க முடியும்.
(iii) ஒரு செயற்குறியின் அடிப்படை செயல் முறையை மறுவரையறை செய்ய முடியாது. முழு எண்கள் கூட்டப்படும் முறையை
மாற்றி அமைக்க முடியாது, ஆனால் கூடுதல் செயல்பாட்டினை அந்த செயற்குறிக்கு வழங்கலாம்.
(iv) பணிமிகுக்கப்பட்ட செயற்குறிகள் முன்னியல்பு செயலுருபுகளைக் கொண்டிருக்காது.
(v) இரும செயற்குறிகளை
பணிமிகுக்கும் போது, அச்செயற்குறியின் இடப்பக்கம் அமையும் பொருள், அது வரையறுக்கப்பட்டுள்ள இனக்குழுவின் பொருளாக இருக்க வேண்டும்.
2. பின்வரும் இனக்குழு நிரலைப் படித்துப்
பார்த்து, (i)முதல்
(v) வரையிலான வினாக்களுக்கு விடையளி.
class Book
{
int BookCode ; char Bookname[20];float fees;
public:
Book() // செயற்கூறு
1
{
fees=1000;
BookCode=1;
strcpy (Bookname,"C++");
}
void display(float C) // செயற்கூறு
2
{
cout<<BookCode<<" :" <<
Bookname <<":" << fees << endl;
}
~Book() //செயற்கூறு
3
{
cout<<"End of Book Object"<<endl;
}
Book (intSC,char S[ ],float F) ; // செயற்கூறு
4
};
(i) மேற்கூறிய நிரலில்,
செயற்கூறு 1 மற்றும் செயற்கூறு
4 என்ற செயற்கூறுகளை ஒன்று சேர்த்து எவ்வாறு குறிப்பிடலாம்?
(ii) செயற்கூறு
3 எந்த கருத்துருக்களை விளக்குகிறது?
இந்த செயற்கூறு எப்பொழுது அழைக்கப்படும்/
செயல்படுத்தப்படும்.
(iii) செயற்கூறு
3 பயன் யாது?
(iv) செயற்கூறு
1 மற்றும் செயற்கூறு
2 ஆகிய செயற்கூறுகளை அழைக்கும் கூற்றுகளை
main() செயற்கூறில் எழுதுக.
(v) செயற்கூறு
4க்கான வரையறையை எழுதுக.
விடை:
(i) செயற்கூறு 1 - அளபுருக்கள் ஏற்காத ஆக்கியின் செயல்முறை
(ii) செயற்கூறு 4 - அளபுருக்களை ஏற்கும் ஆக்கியின் வெளியே வரையறுப்பதை விளக்குகிறது.
(iii) செயற்கூறு 2 - அழிப்பி என்ற சிறப்பு செயற்கூறானது ஆக்கியால் உருவாக்கப்பட்ட பொருளின்
வாழ்நாள் முடிந்து அழியும்போது அழைக்கப்படுகிறது.
(iv) செயற்கூறு 3 - ஆக்கியால் உருவாக்கப்பட்ட நினைவகத்தை அழிக்கும்.
(iv) int main()
{
Book B1;
B1.Book( );
B1.display(10.5);
}
(v) Book :: Book(int Sc, CharS[], float F)
{
Bookcode = sc;
strcpy(Bookname,s);
fees=F;
}
3. பின்வரும் நிரலுக்கான வெளியீட்டை
எழுதுக.
include<iostream>
using namespace std;
class Seminar
{
int Time;
public:
Seminar()
{
Time=30;cout<<"Seminar starts
now"<<endl;
}
void Lecture()
{
cout<<"Lectures in the seminar
on"<<endl;
}
Seminar(int Duration)
{
Time=Duration;cout<<"Welcome to Seminar
"<<endl;
}
Seminar(Seminar &D)
{
Time=D.Time;cout<<"Recap of Previous
Seminar Content "<<endl;
}
~Seminar()
{
cout<<"Vote of thanks"<<endl;
}
};
int main()
{
Seminar s1,s2(2),s3(s2);
s1.Lecture();
return 0;
}
விடை:
வெளியீடு :
Seminar Starts now
Welcome to Seminar
Recap of Previous Seminar Content
Lectures in the Seminar on
Vote of thanks
4. பின்வரும் நிரலில் உள்ள பிழைகளை
கண்டறிந்து திருத்தவும்.
#include<iostream>
using namespace std;
class String
{
public:
charstr[20];
public:
void accept_string
{
cout<<"\n Enter String : ";
cin>>str;
}
display_string()
{
cout<<str;
}
String operator *(String x) //Concatenating String
{
String s;
strcat(str,str);
strcpy(s.str,str);
goto s;
}
}
int main()
{
String str1, str2, str3;
str1.accept_string();
str2.accept_string();
cout<<"\n\n First String is : ";
str1=display_string();
cout<<"\n\n Second String is : ";
str2.display_string();
str3=str1+str2;
cout>>"\n\n Concatenated String is :
";
str3.display_string();
return 0;
}
Correct Program //char str[20];
விடை:
Debug
charstr[20];
public:
void accept_string()
display_string()
string operator *(String x) \\ Concatenating String
strcat(str,str);
}
cout>>"\n\n concatenated string is concatenated string is:”;
Correct Program
charstr[20];
void accept_string()
void display_string()
\\string operator +(string X)
\\lstrcat(str, x.str)
//};
cout>>"\n\n concatenated string is concatenated string is:”;
5. பின்வரும் நிரலின் அடிப்படையில்
வினாக்களுக்கு விடையளி:
#include<iostream>
#include<string.h>
using namespace std;
class comp {
public:
chars[10];
void getstring(char str[10])
{
strcpy(s,str);
}
void operator==(comp);
};
void comp::operator==(comp ob)
{
if(strcmp(s,ob.s)==0)
cout<<"\nStrings are Equal";
else
cout<<"\nStrings are not Equal";
}
int main()
{
comp ob, ob1;
char string1[10], string2[10];
cout<<"Enter First String:";
cin>>string1;
ob.getstring(string1);
cout<<"\nEnter Second String:";
cin>>string2;
ob1.getstring(string2);
ob==ob1;
return 0;
}
(i) நிரலின் இறுதி வரை நீடித்திருக்கும்
பொருள்களை கூறு.
(ii) நிரலின் இயக்கத்திற்கிடையே அழிந்து
விடும் பொருளை
கூறு.
(iii) பணிமிகுக்கப்பட்ட செயற்குறி மற்றும்
அதனை அழைக்க
பயன்படும் கூற்றினை எழுதுக.
(iv) பணிமிகுப்பு செய்யப்பட்ட உறுப்பு
செயற்கூறின் முன்வடிவை
எழுதுக.
(v) பணிமிகுக்கப்பட்ட செயற்குறிக்கு
எந்த வகையான செயலேற்பிகள்
பயன்படுத்தப்பட்டுள்ளன?
(vi) எந்த ஆக்கி செயல்படுத்தப்படும்?
நிரலின் வெளியீட்டை
எழுது.
விடை:
(i) ob, ob1;
(ii) ob
(iii) ==,ob==obl;
(iv) void operator==(comp);
(v) string
(vi) தானமைவு ஆக்கி ஆனது இயங்குகிறது.
வெளியீடு :
Enter First String : TEXT
Enter Second String : BOOK
Strings are not Equal
ஆய்வறிக்கை
தொடக்கத்தில் உன் சிறுசேமிப்பில் தொகை ரூ.500
உள்ளது என்று வைத்துக் கொள்வோம்.
அதில் மேலும் சில தொகையினை சேமிக்க விரும்புகிறாய்.
தொடக்க மதிப்பு ரூ.500
கொண்ட
amount என்னும் தரவு உறுப்பைக் கொண்டு
deposit என்ற இனக்குழுவை உருவாக்கு.
அதில், பின்வரும்
மூன்று ஆக்கிகளை வரையறுக்கவும்.
1. அளபுருக்கள் இல்லாமல்
- (எந்த தொகையும் சிறுசேமிப்பில் சேர்க்கப்படமாட்டாது).
2. சேமிப்பில் சேர்க்கப்பட வேண்டிய
தொகையினை, கொண்ட அளபுருக்கள்.
3. ஒவ்வொரு முறையும் தொகையை சேர்க்கும்போது
அதற்கு சமமான தொகையும் தாமாகவே சேர்த்துக் கொள்ளப்பட வேண்டும்.
Deposit இனக்குழுவிற்கு ஒரு பொருளை
உருவாக்கி, சேமிப்பில்
உள்ள மொத்த தொகையினை வெளியிடு.
விடை:
#include<iostream>
Class Deposit
{
int amount;
Deposit ( )
{
amount = 0;
}
Deposit (int d)
}
amount = dP;
Deposit (Deposit @ d)
}
amount = d.amount;
}
void display ()
{
amount = amount + 500;
cout <<
"Amout" << amout;
}
};
int (main C)
Deposit D1, D2(D1), D3(2000);
D1 .display ( );
D2. display ( );
D3. display ( );
}