摘要: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;
- };