文章目录
面向对象和面向过程区别
如:
设计简单外卖系统
面向过程:关注实现下单,接单,送餐=>体现在代码层面—函数/方法
面向对象:关注实现类对象及类对象间的关系,用户,商家,骑手以及他们之间的关系,他体现到代码层面–类的设计,以及类之间的关系
c++基于面向对象:面向对象与面向过程可以混编(c++兼容c)
Java纯面向对象:只有面向对象
类的引入
定义类可以用struct,class
定义一个最简单的类
c++里面兼容c里面结构体的用法
同时struct在c++里面也升级成了类
c++类的结构体不同的是除了可以定义变量,还可以定义函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| struct Student { char _name[10]; int _age; int _id;
void init(const char* name, int age, int id) { strcpy_s(_name, name); _age = age; _id = id; } void PRINT() { cout << _name << endl; cout << _age << endl; cout << _id << endl; } };
```cpp int main() { Student s2; Student s3;
s2.init("zhangshan", 12, 1); s3.init("lisi", 15, 2); s2.PRINT(); s3.PRINT(); Stack st; st._init(); st._push(1); int top=st.Top();
return 0; }
|
面向对象—-编程有三大特性:封装,继承,多态
封装:1.数据和方法放到了一起,在类里面
2.访问限定符
public,private,protect
访问限定符说明
public修饰的成员可以在类外面直接访问
private和protect修饰的成员不可以在类外面直接访问
class 的默认访问限定符是private,struct的默认访问限定符是public
在使用的时候,最好明确他的访问限定符,不要用默认访问限定符
封装是一种更好的严格管理,我们要执行的一切操作都要通过类里面的函数,乱操作可能会有问题
1。数据和方法都封装到类里面了
2.可以给你访问的定义成public,不想给你访问的定义成private
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| class Stack { public: void _init() { _a = nullptr; _top = _capacity = 0; }
int Top() { assert(_top > 0); return _a[_top - 1]; }
void _push(int x) {
}
private:
int* _a; int _top; int _capacity;
};
class Student { char _name[10]; int _age; int _id;
public:
void init(const char* name, int age, int id) { strcpy_s(_name, name); _age = age; _id = id; }
void PRINT() { cout << _name << endl; cout << _age << endl; cout << _id << endl; }
};
|
计算类或类对象的大小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| class Stack { public: void _init() { _a = nullptr; _top = _capacity = 0; }
int Top() { assert(_top > 0); return _a[_top - 1]; }
void _push(int x) {
}
private:
int* _a; int _top; int _capacity;
};
int main() {
Stack s1; Stack s2; s1.top_ = 0; s2.top_ = -1;
s1.init(); cout << sizeof(Stack) << endl; cout << sizeof(s1) << endl; return 0; }
|
this指针
1 2 3 4
| 隐藏的this指针 调用成员函数时,不能显示传实参给this, 定义成员函数时,也不能显示声明传给this 在成员函数内部可以显示使用this
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| class Date { public:
void Init(int year,int month,int day) { year_ = year; month_ = month; day_ = day; }
void Print() { cout <<this-> year_ << " " << month_ << " " << day_ << endl; }
private: int year_; int month_; int day_; };
int main() { Date d1; d1.Init(2022, 1, 15); d1.Print(); Date d2; d2.Init(2022, 1, 16); d2.Print( }
|
面试题
1.this指针是存在哪的?严格来说是存在栈的,(形参)
有些编译器会放到寄存器里面,放到了ecx中,
2.this指针也可以为空
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include<iostream> using namespace std;
class A { public:
void show() { cout << "show" << endl; } void PrintA() { cout << a_ << endl; }
private: int a_; };
int main() { A* p = nullptr; p->show(); p->PrintA(); }
|