C++/Class/Private — различия между версиями
Admin (обсуждение | вклад) м (1 версия: Импорт контента...) |
|
(нет различий)
|
Текущая версия на 10:25, 25 мая 2010
Содержание
Class combination with private fields
#include <iostream>
#include <string.h>
using namespace std;
class Book
{
public:
Book(char *title) { strcpy(Book::title, title); } ;
void show_book(void) { cout << title; };
friend class Reader;
private:
char title[64];
};
class Reader
{
public:
Reader(char *name) { strcpy(Reader::name, name); };
void show_reader(class Book book) {
cout << "Reader: " << name << " " << "Book: " << book.title;
};
void show_book(void) { cout << "The book"s reader is " << name << endl; } ;
private:
char name[64];
};
int main(void)
{
Reader reader("K");
Book favorite_book("C");
reader.show_book();
reader.show_reader(favorite_book);
}
Keep the private on your own
#include <iostream>
#include <string.h>
using namespace std;
class Base {
public:
Base(char *message) { strcpy(Base::message, message); };
void show_base(void) { cout << message << endl; };
private:
char message[256];
};
class Derived: public Base {
public:
Derived(char *dmsg, char *bmsg) : Base(bmsg) {
strcpy(message, dmsg);
};
void show_derived(void)
{
cout << message << endl;
show_base();
};
private:
char message[256];
};
int main(void)
{
Base some_base("This is a base");
Derived some_derived("Derived message", "Base message");
cout << "The size of the base class is " << sizeof(some_base) << " bytes" << endl;
cout << "The size of the derived class is " << sizeof(some_derived) << " bytes" << endl;
}
Private and protected member variables
#include <iostream>
using namespace std;
class MyClass {
int a; // private by default
protected: // still private relative to MyClass
int b;
public:
int c;
MyClass(int n, int m) {
a = n;
b = m;
}
int geta() {
return a;
}
int getb() {
return b;
}
};
int main()
{
MyClass object(10, 20);
object.c = 30; // OK, c is public
cout << object.geta() << " ";
cout << object.getb() << " " << object.c << "\n";
return 0;
}
Private and public sections
#include <iostream>
#include <iomanip>
#include <string.h>
using namespace std;
class Book
{
public:
char title[256];
char author[64];
float price;
void show_title(void) { cout << title << "\n"; };
float get_price(void) { return(price); };
void show_book(void)
{
show_title();
show_publisher();
};
void assign_publisher(char *name) { strcpy(publisher, name); };
private:
char publisher[256];
void show_publisher(void) { cout << publisher << "\n"; };
};
int main(void){
Book bible;
strcpy(bible.title, "A");
strcpy(bible.author, "B");
bible.price = 49.95;
bible.assign_publisher("C");
bible.show_book();
}
Private and public variables and methods
#include <iostream>
#include <cstring>
using namespace std;
class Person {
char name[80]; // private by default
public:
void setName(char *n);
void getName(char *n);
private:
double wage;
public:
void setWage(double w);
double getWage();
};
void Person::setName(char *n)
{
strcpy(name, n);
}
void Person::getName(char *n)
{
strcpy(n, name);
}
void Person::setWage(double w)
{
wage = w;
}
double Person::getWage()
{
return wage;
}
int main()
{
Person ted;
char name[80];
ted.setName("Joe");
ted.setWage(75000);
ted.getName(name);
cout << name << " makes $";
cout << ted.getWage() << " per year.";
return 0;
}
Setting member access levels
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass(int level = 0);
int GetLevel() const;
void SetLevel(int level);
private:
int myLevel;
};
MyClass::MyClass(int level): myLevel(level)
{
cout << "A new object has been born!" << endl;
}
int MyClass::GetLevel() const
{
return myLevel;
}
void MyClass::SetLevel(int level)
{
if (level < 0)
cout << "You can"t set a level to a negative number.\n\n";
else
myLevel = level;
}
int main()
{
MyClass myObject(5);
cout << myObject.GetLevel() << endl;
cout << "Calling SetLevel() with -1.\n";
myObject.SetLevel(-1);
cout << "Calling SetLevel() with 9.\n";
myObject.SetLevel(9);
cout << "Calling GetLevel(): " << myObject.GetLevel() << "\n\n";
return 0;
}
Use public methods to access private fields
#include <iostream>
using namespace std;
class Distance
{
private:
const float MTF;
int feet;
float inches;
public:
Distance() : feet(0), inches(0.0), MTF(3.28F)
{ }
explicit Distance(float meters) : MTF(3.28F){
float fltfeet = MTF * meters;
feet = int(fltfeet);
inches = 12*(fltfeet-feet);
}
void showdist()
{ cout << feet << "\"-" << inches << "\""; }
};
int main()
{
void fancyDist(Distance);
Distance dist1(2.35F);
dist1.showdist();
float mtrs = 3.0F;
return 0;
}
void fancyDist(Distance d){
cout << "(in feet and inches) = ";
d.showdist();
cout << endl;
}