structのCとC++の違い
6742 ワード
/*- ==========================================================
* :TestCppStruct.cpp
* :
* :1.0.0.2595
* :2012-05-17
* :2012-05-17
* :C++
* : YuanPeirong
* :Windows 7(x64) SP1
* : Visual Studio 2010 SP1( )
MinGW 20111108
Visual C++ 6.0 SP6( )
- ==========================================================*/
#include <iostream>
using std::cout;
using std::endl;
//====================================================================
struct STest
{
int a;
char c;
STest()
{
cout<<"STest "<<endl;
a=10;
c='S';
};
};
//====================================================================
struct STest2
{
int a;
char c;
STest2();
};
STest2::STest2()
{
cout<<"STest2 "<<endl;
a=15;
c='T';
}
//====================================================================
struct STest3
{
int a;
char c;
void Test()
{
cout<<"STest3 Test "<<endl;
a=10;
c='S';
};
};
//====================================================================
struct STest4
{
int a;
char c;
void Test();
};
void STest4::Test()
{
cout<<"STest4 Test "<<endl;
a=15;
c='T';
}
//====================================================================
struct STest5
{
int a;
void Test();
private:
char c;
void Test2();
};
void STest5::Test()
{
cout<<"STest5 Test "<<endl;
a=16;
c='X';
}
void STest5::Test2()
{
cout<<"STest5 Test2 "<<endl;
a=17;
c='Y';
}
//====================================================================
int main(int argc, char* argv[])
{
//====================================================================
STest s11; // C struct STest s11; C++ struct
STest2 s21; //
cout<<"s11: "<<s11.a<<" "<<s11.c<<endl;
cout<<"s21: "<<s21.a<<" "<<s21.c<<endl;
s11.a=100;
s21.c='Z';
cout<<" s11 s21 !"<<endl;
cout<<"s11: "<<s11.a<<" "<<s11.c<<endl;
cout<<"s21: "<<s21.a<<" "<<s21.c<<endl;
//====================================================================
// C++ ,C ,
//====================================================================
//====================================================================
// STest s12={1,'A'};
// STest s22={2,'B'};
// cout<<"s12: "<<s12.a<<" "<<s12.c<<endl;
// cout<<"s22: "<<s22.a<<" "<<s22.c<<endl;
//====================================================================
// error: `s12' must be initialized by constructor, not by `{...}'
// error: `s22' must be initialized by constructor, not by `{...}'
// {...}
//====================================================================
//====================================================================
STest3 s31={1,'A'};
STest4 s41={2,'B'};
cout<<" {...} s31 s41 "<<endl;
cout<<"s31: "<<s31.a<<" "<<s31.c<<endl;
cout<<"s41: "<<s41.a<<" "<<s41.c<<endl;
s31.Test();
s41.Test();
cout<<"s31: "<<s31.a<<" "<<s31.c<<endl;
cout<<"s41: "<<s41.a<<" "<<s41.c<<endl;
s31.a=100;
s41.c='Z';
cout<<" s31 s41 !"<<endl;
cout<<"s31: "<<s31.a<<" "<<s31.c<<endl;
cout<<"s41: "<<s41.a<<" "<<s41.c<<endl;
//====================================================================
// C++
// C++ {...}
//====================================================================
//====================================================================
//STest5 s51={5,'A'};
// error: `s51' must be initialized by constructor, not by `{...}'
//s51.Test2();
//error: `void STest5::Test2()' is private
//s51.c='Z';
// error: `char STest5::c' is private
STest5 s52;
s52.a=52;
cout<<"s52.a="<<s52.a<<endl;
s52.Test();
cout<<"s52.a="<<s52.a<<endl;
s52.a=10;
cout<<"s52.a="<<s52.a<<endl;
//====================================================================
// STest5 :
// C++ private public protected
// C++ ,
// {...}
// , :
// private public
//
//====================================================================
return 0; // C C++ , C++
}
//====================================================================
//
//====================================================================
// STest
// STest2
// s11: 10 S
// s21: 15 T
// s11 s21 !
// s11: 100 S
// s21: 15 Z
// {...} s31 s41
// s31: 1 A
// s41: 2 B
// STest3 Test
// STest4 Test
// s31: 10 S
// s41: 15 T
// s31 s41 !
// s31: 100 S
// s41: 15 Z
// s52.a=52
// STest5 Test
// s52.a=16
// s52.a=10
//====================================================================
// : C++
// 1. C ,
// 2.C++ , class ,
//
// private
// public
// , private public protected
// C++ C C++
//====================================================================
//====================================================================
// MinGW
//
// Visual Studio 2010 SP1( )
// MinGW 20111108
// Visual C++ 6.0 SP6( )
//
//====================================================================