C++初阶2--1 https://developer.aliyun.com/article/1424510
三,C++类的初步学习
在讲解类之前我们先要明白C++与C基础区别。C语言是面向过程语言,关注的是过程,分析出求解问题的步骤,需要通过函数调用逐步解决问题,而C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成,我们平常设定的常量和变量就是对象。
3-1,类的引用
C++中的类可认为C中的结构体,与之不同的是C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。需注意的是,在类中定义的函数默认是inline,但会不会当初内联函数,还需看编译器,跟inline的原理一样。
struct Stack { //变量的定义 int* a; int top; int capacity; //函数的定义 void StackPush(Stack* S, int x) { if (S->top == S->capacity - 1) { S->capacity = S->capacity == 0 ? 4 : S->capacity * 2; S->a = (int*)realloc(S->a, sizeof(int) * S->capacity); } S->a[++S->top] = x; } void StackPop(Stack* S) { if (S->top < 0) { return; } S->top--; } };
其中,C++兼容了C语言的几乎所有用法,同时,将结构体升级为类,类的类名就是类型,如上述代码中Stack就是一整个类型,只需在定义时加上struct,在运用时不需要加struct。如下:
int main() { //定义stack1和stack2两个类 Stack stack1; Stack stack2; return 0; }
上面结构体的定义,在C++中常用class来代替,效果都是一样的。如将struct Stack{};换成class Stack{},class与struct之间也有不同之处,具体不同下面和以后的文章会详细讲解。
3-2,类的访问权限
类的权限是用于管理类是否可以被外部访问。C++用类将不同对象的属性与方法结合在一块,通过访问权限选择性的将其提供给外部的用户使用。类的权限类型和注意要素如下图:
这里要注意的是class与struct的不同之处,不光是在权限上,在继承和模板参数列表位置,struct和class也有区别,本文只是初步介绍类,在此不作过多讲解,后面的文章将会详细介绍。
权限的运用代码;
struct Stack { private://以下的变量对象设置私有权限,只能在类中使用 int* a; int top; int capacity; public://以下的函数定义设置为公有权限,可以在类Stack外部使用 void StackPush(Stack* S, int x) { if (S->top == S->capacity - 1) { S->capacity = S->capacity == 0 ? 4 : S->capacity * 2; S->a = (int*)realloc(S->a, sizeof(int) * S->capacity); } S->a[++S->top] = x; } void StackPop(Stack* S) { if (S->top < 0) { return; } S->top--; } };
3-3,类的使用
1,类中函数的定义
C++的类中,由于函数都自带inline,所以常常将内部大的函数只声明,在外部定义,把内部小的函数直接定义,系统将自动识别为内联函数。当在外部定义类中的函数时,需要运用域的限定符"::",因为类其实是定义了一个新的作用域,类的所有成员都在类的作用域中,在类体外定义成员时,需要使用"::"作用域操作符指明成员属于哪个类域。不光是类,只要运用了"{}"大括号,其实都是一个作用域。样例代码如下:
class Person { public: void Student(char* name1, char* gender1, int age1); private: char name[20]; char gender[3]; int age; }; //这里需要指定Student是属于Person这个类域的函数实现 void Person::Student(char* name1, char* gender1, int age1) { strcpy(name, name1); strcpy(gender,gender1); age = age1; //输出Person中的变量,因为此函数就是调用Person类中的函数,使用时可直接认为在类中使用 cout << name << " " << gender << " " << age << endl; }
2,类中对象的使用
类中对象的使用跟类中函数定义不一样,之前说过,类如同C中结构体一般,当使用类时就相当于使用结构体,因此,用法也自然跟结构体一样,唯一要注意的是使用哪个对象时一定要把对象的权限设为public,即公有的。代码如下:
#include <iostream> using namespace std; class Person { public: void Student(char* name1, char* gender1, int age1); char name[20]; char gender[3]; int age; }; void Person::Student(char* name1, char* gender1, int age1) { strcpy(name, name1); strcpy(gender,gender1); age = age1; cout << name << " " << gender << " " << age << endl; } int main() { //定义类a1 Person a1; strcpy(a1.name, "张三"); strcpy(a1.gender, "45"); a1.age = 15; a1.Student(a1.name, a1.gender, a1.age); return 0; }
C++初阶2--3https://developer.aliyun.com/article/1424520?spm=a2c6h.13148508.setting.21.214f4f0eDzCQ1n