C++初阶2--2

简介: C++初阶2--2

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++用类将不同对象的属性与方法结合在一块,通过访问权限选择性的将其提供给外部的用户使用。类的权限类型和注意要素如下图:

0cf1c59ee88348ee8c555f3f1796c418.png



       这里要注意的是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

相关文章
|
3天前
|
编译器 C语言 C++
c++初阶------类和对象(六大默认构造函数的揭破)-3
c++初阶------类和对象(六大默认构造函数的揭破)
|
3天前
|
编译器 C语言 C++
c++初阶------类和对象(六大默认构造函数的揭破)-2
c++初阶------类和对象(六大默认构造函数的揭破)
|
3天前
|
存储 编译器 C语言
c++初阶-------类和对象-2
c++初阶-------类和对象
|
3天前
|
安全 编译器 C语言
C++初阶------------------入门C++(三)
C++初阶------------------入门C++(三)
|
3天前
|
存储 Linux 编译器
C++初阶------------------入门C++(二)
C++初阶------------------入门C++(二)
|
3天前
|
编译器 C语言 C++
C++初阶------------------入门C++(一)
C++初阶------------------入门C++(一)
|
3天前
|
存储 编译器 对象存储
【C++基础(十)】C++泛型编程--模板初阶
【C++基础(十)】C++泛型编程--模板初阶
【C++基础(十)】C++泛型编程--模板初阶
|
3天前
|
编译器 C语言 C++
【C++初阶(九)】C++模版(初阶)----函数模版与类模版
【C++初阶(九)】C++模版(初阶)----函数模版与类模版
20 0
|
3天前
|
存储 编译器 Linux
【C++初阶(十)】C++模板(进阶) ---非类型模板参数、模板的特化以及模板的分离编译
【C++初阶(十)】C++模板(进阶) ---非类型模板参数、模板的特化以及模板的分离编译
24 0
|
3天前
|
存储 C++ 容器
【C++初阶】STL详解(十)set、map、multiset、multimap的介绍及使用
【C++初阶】STL详解(十)set、map、multiset、multimap的介绍及使用
35 0