Arvin Liu
int x;
int x, y, z;
?
coordinate: 座標
crood3d dot;
int x[100], y[100], z[100];
cin >> n;
for(int i=0; i<n; i++){
cin >> x[i];
cin >> y[i];
cin >> z[i];
}
從前,你會這樣寫。
int x[100], y[100], z[100];
cin >> n;
for(int i=0; i<n; i++){
cin >> x[i];
cin >> y[i];
cin >> z[i];
}
從前,你會這樣寫。
struct coord{
int x, y, z;
};
// ....
coord dot[100];
cin >> n;
for(int i=0; i<n; i++){
cin >> dot[i].x;
cin >> dot[i].y;
cin >> dot[i].z;
}
現在,你可以這樣寫。
相關的變數散落一地。
相關的變數捆在一起。
#include <iostream>
using namespace std;
struct coord{
int x, y, z;
};
int main(){
int n;
coord dot[100];
cin >> n;
for(int i=0; i<n; i++){
cin >> dot[i].x;
cin >> dot[i].y;
cin >> dot[i].z;
}
}
創造一個新的形態: crood,包含著三個整數,xyz。
記得要加分號。
宣告: 把它當正常的型態就可以了。 就像int一樣宣告。
使用: (變數).(裡面的成員)。
(. 可以叫做 的)
struct宣告常放global,但放function內也可。
一個完整的範例。
沒錯,struct裡面可以再包一個struct!
struct circle{
coord pos;
double R;
};
struct circle{
coord pos;
double R;
};
struct circle{
coord pos;
double R;
};
double area(circle C){
double pi = 3.1415926;
return C.R * C.R * pi;
}
相關的變數 函數散落一地。
從前(?) 你是這樣寫。
struct circle{
coord pos;
double R;
};
double area(circle C){
double pi = 3.1415926;
return C.R * C.R * pi;
}
struct circle{
double pi = 3.1415926;
coord pos;
double R;
double area(){
return R * R * pi;
}
};
同理,函式也可以放進去。
就不用指定是哪個圓了。
#include <iostream>
using namespace std;
struct coord{
int x, y;
};
struct circle{
double pi = 3.1415926;
coord pos;
double R;
double area(){
return R * R * pi;
}
};
int main(){
circle C;
C.pos.x = 0, C.pos.y = 1, C.R = 1.2;
cout << C.pos.x << " " << C.pos.y << endl;
cout << C.R << endl;
cout << C.area() << endl;
}
#include <iostream>
using namespace std;
struct coord{
int x, y;
};
struct circle{
double pi = 3.1415926;
coord pos;
double R;
double area(){
return R * R * pi;
}
};
int main(){
circle C;
C.pos.x = 0, C.pos.y = 1, C.R = 1.2;
cout << C.pos.x << " " << C.pos.y << endl;
cout << C.R << endl;
cout << C.area() << endl;
}
幹什麼東西?
int x=1;
crood dot;
dot.x = dot.y = 0;
int x(1);
crood dot(0, 0);
?
int x(1);
crood dot(0, 0);
crood dot(0, 0);
struct coord{
int x, y;
coord(int a, int b){
x = a, y = b;
}
};
struct coord{
int x, y;
};
crood dot;
dot.x = dot.y = 0;
struct coord{
int x, y;
coord(){
x = 0, y = 0;
}
};
struct coord{
int x, y;
coord(){
x = 0, y = 0;
}
};
struct coord{
int x, y;
coord(int a, int b){
x = a, y = b;
}
};
struct coord{
int x, y;
coord(){
x = 0, y = 0;
}
coord(int a, int b){
x = a, y = b;
}
};
#include <iostream>
using namespace std;
struct coord{
int x, y;
coord(){
x=0, y=0;
}
coord(int a, int b){
x=a, y=b;
}
void print(){
printf("(%d, %d)\n", x, y);
}
};
int main(){
coord A;
coord B(1, 2);
A.print();
B.print();
}
# Output:
(0, 0)
(1, 2)
struct coord{
int x, y;
coord(){
x=0, y=0;
}
coord(int a, int b){
x=a, y=b;
}
};
int main(){
coord A;
}
int main(){
coord A;
}
struct coord{
int x, y;
// 沒有任何建構子的時候,
// 程式會自己建立預設建構子。
// coord(){}
};
coord A會對應
到coord()的建構子。
沒建構子給coord A對應?
struct沒有建構子,
程式就會自己加預設建構子。
預設建構子沒有參數也不會做事。
struct coord {
int x, y;
coord (int _x, int _y){
x = _x, y = _y;
}
};
struct crood {
int x, y;
coord (){x = y = 0;}
coord (int _x, int _y) {
x = _x, y = _y;
}
};
coord c;
宣告
使用
coord c;
struct coord {
int x, y;
};
coord c;
error: no matching function for call to ‘coord::coord()’
OK : 符合其中一個自己寫的建構子
OK : 使用預設建構子
struct coord {
int x, y;
coord (int x, int y) {
x = x, y = y;
}
};
struct coord {
int x, y;
coord (int _x, int _y) {
x = _x, y = _y;
}
};
struct coord {
int x, y;
coord (int x, int y) {
this -> x = x;
this -> y = y;
}
};
this -> 的用法 2!可能會教(?)
struct coord {
int x;
int y;
coord () {
x = y = 0;
}
coord (int _x, int _y) {
x = _x;
y = _y;
}
int f () {
return x * y ;
}
};
int x;
int y;
return x*y;
struct coord {
int x;
int y;
coord () {
x = y = 0;
}
coord (int _x, int _y) {
x = _x;
y = _y;
}
int f () {
return x * y ;
}
};
coord c;
coord c();
coord c(2, 3);
cout << c.x;
cout << c.f();