摘要:class,成员函数,成员变量,类的大小,this 指针
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
#include
struct MyBook
{
char book_name[13];
double price;
};
void Print(struct MyBook b_p)
{
printf("%s %f", b_p.book_name, b_p.price);
}
int main()
{
struct MyBook book = { "xxxx",13.7 };
Print(book);
return 0;
}
struct MyBook_C
{
void Print()
{
//……
}
char book_name[13];
double price;
};
class MyBook_CPP
{
public:
void Print()
{
……
}
private:
char* book_name;
double price;
};
int main()
{
MyBook_C book1;
MyBook_CPP book2;
return 0;
}
class 中“类的成员”默认私有,在 class 类域外不可访问。
访问限定符的作用域:从该访问限定符到下一个访问限定符或结束。
(类内不受访问限定符的限制)
注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别
类被定义之后会形成类域。函数声明与定义分离需要指明类域。在类内定义的函数默认是内联函数,代码量小、比较简单的函数一般直接在类中定义。
class Date
{
public:
void Init(int year = 0, int month = 0, int day = 0)
{
year = year;
month = month;
day = day;
//局部变量优先,这里的操作是自己赋值给自己
}
private:
int year;
int month;
int day;
};
所以,建议有所区分地命名: 例如
class Date
{
public:
void Init(int year = 0, int month = 0, int day = 0)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
class classname{ functions ; variables } 成员函数 functions 对于对象来说就像一个小区的公共区域,它们被存放在公共代码区(代码段);成员变量 variables 类实例化之后,要存储数据,对每一个实例化出来的对象都是私有的,并且这些变量遵循C语言的内存对齐规则,决定了 sizeof(classname) 的大小。如下图所示。
C语言 结构体内存对齐规则:
class Date
{
public:
Date(const int year, const int month, const int day)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;// 0 1 2 3
int _month;// 4 5 6 7
int _day;//8 9 10 11 → 12(内存对齐)
};
class Only_functions
{
public:
void Print()
{
cout << "Only_functions" << endl;
}
};
class Empty{};
int main()
{
cout << sizeof(Date) << endl;//output:12
cout << sizeof(Only_functions) << endl;//output:1
cout << sizeof(Empty) << endl;//output:1
Only_functions o1;
o1.Print();
cout << sizeof(o1) << endl;//output:1
return 0;
}
class Date
{
public:
void Init(const int year = 2023, const int month = 1, const int day = 1)
{
this->_year = year;
this->_month = month;
this->_day = day;
}
private:
int _year;
int _month;
int _day;
};