『新標準C++プログラミング』2.4-2.6(C++学習ノート4)
7033 ワード
1、オブジェクトのメモリマッチング
一般に、C++では、1つのオブジェクトが占有するメモリ領域のサイズは、そのメンバー変数が占有するメモリ領域のサイズの和に等しい.(オブジェクトにはメンバー変数のみが含まれ、メンバー関数は含まれません)
各オブジェクトにはそれぞれのストレージスペースがあります.あるオブジェクトのメンバー変数が変更されると、別のオブジェクトには影響しません.
2、クラスのメンバー変数とメンバー関数の使用方法
①対象名メンバー名
②ポインタ->メンバー名
③引用名メンバー名
3、クラスメンバーのアクセス可能範囲
private:プライベートメンバーを指定します.このクラスのメンバー関数内でのみアクセスできます.
public:共有メンバーを指定します.どこでも訪問できます.
protected:保護メンバーを指定します.
3つのキーワードの出現回数と前後順序には制限はありません.
メンバーの前にアクセス範囲説明子がない場合、classではデフォルトでプライベートメンバーとみなされます.structの場合、このメンバーはデフォルトで公有メンバーとみなされます.
クラスのメンバー関数の内部で、現在のオブジェクトのすべての属性、関数にアクセスできます.クラスの他のオブジェクトのすべてのプロパティ、関数は、クラスのメンバー関数以外の場所で、クラスのオブジェクトの共有メンバーにのみアクセスできます.
4、非表示
プライベートメンバーを設定するメカニズムを非表示と呼びます.その目的の1つは、メンバー変数へのアクセスをメンバー関数で強制することです.このような利点は、メンバー変数のタイプなどの属性を変更した場合、メンバー関数を変更するだけでよいことです.それ以外の場合、メンバー変数に直接アクセスするすべての文を変更する必要があります.
5、メンバー関数のリロードとパラメータのデフォルト
メンバー関数はリロードできます.デフォルトのパラメータを持つことができます.デフォルトのパラメータを使用するには、関数の再ロード時の二義性を避けることに注意してください.
6、サンプルプログラムの剖析
(1)
(2)
一般に、C++では、1つのオブジェクトが占有するメモリ領域のサイズは、そのメンバー変数が占有するメモリ領域のサイズの和に等しい.(オブジェクトにはメンバー変数のみが含まれ、メンバー関数は含まれません)
各オブジェクトにはそれぞれのストレージスペースがあります.あるオブジェクトのメンバー変数が変更されると、別のオブジェクトには影響しません.
2、クラスのメンバー変数とメンバー関数の使用方法
①対象名メンバー名
②ポインタ->メンバー名
③引用名メンバー名
3、クラスメンバーのアクセス可能範囲
private:プライベートメンバーを指定します.このクラスのメンバー関数内でのみアクセスできます.
public:共有メンバーを指定します.どこでも訪問できます.
protected:保護メンバーを指定します.
3つのキーワードの出現回数と前後順序には制限はありません.
メンバーの前にアクセス範囲説明子がない場合、classではデフォルトでプライベートメンバーとみなされます.structの場合、このメンバーはデフォルトで公有メンバーとみなされます.
クラスのメンバー関数の内部で、現在のオブジェクトのすべての属性、関数にアクセスできます.クラスの他のオブジェクトのすべてのプロパティ、関数は、クラスのメンバー関数以外の場所で、クラスのオブジェクトの共有メンバーにのみアクセスできます.
4、非表示
プライベートメンバーを設定するメカニズムを非表示と呼びます.その目的の1つは、メンバー変数へのアクセスをメンバー関数で強制することです.このような利点は、メンバー変数のタイプなどの属性を変更した場合、メンバー関数を変更するだけでよいことです.それ以外の場合、メンバー変数に直接アクセスするすべての文を変更する必要があります.
5、メンバー関数のリロードとパラメータのデフォルト
メンバー関数はリロードできます.デフォルトのパラメータを持つことができます.デフォルトのパラメータを使用するには、関数の再ロード時の二義性を避けることに注意してください.
6、サンプルプログラムの剖析
(1)
#include
using namespace std;
class CRectangle
{
public:
int w, h; // ,
void init(int w_, int h_); // ,
int area(); // ,
int perimeter(); // ,
}; //
viod CRectangle::Init(int w_, int h_)
{
w = w_;
h = h_;
}
int CRectangle::area()
{
return w * h;
}
int CRectangle::perimeter()
{
return 2 * (w + h);
}
int main()
{
int w, h;
CRectangle r; //r
cin >> w >> h;
r.init(w, h); // , r
cout << "It`s area is " << r.area() << endl;
cout << "It`s perimeter is " << r.perimeter();
cout << sizeof(CRectangle) << endl;
return 0;
}
(2)
#include
#include
using namespace std;
class CEmployee {
private:
char szName[30]; //
public:
int salary; //
void setName(char* name);
void getName(char* name);
void averageSalary(CEmployee e1, CEmployee e2);
};
void CEmployee::setName(char* name) {
strcpy(szName, name); //OK
}
void CEmployee::getName(char* name) {
strcpy(name, szName); //OK
}
void CEmployee::averageSalary(CEmployee e1, CEmployee e2)
{
salary = (e1.salary + e2.salary) / 2;
}
int main()
{
CEmployee e;
strcpy(e.szName, "Tom1234567889");//
e.setName("Tom"); //OK
e.salary = 5000; //OK
return 0;
}