学习c++小记 --2023.8.2

字符和字符串
‘A’   字符
“A”   字符串
算法

算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一个指令
    表示一个或多个操作
    2)算法的特性
        ①有穷性
            一个算法必须保证有限步之后结束
        ②确定性
            算法中每一条指令必须有确切的含义
        ③可行性
            算法中所有操作都必须通过已经实现的操作进行运算
        ④输入
            一个算法有0个或多个输入
        ⑤输出
            一个算法有一个或多个输出

静态成员的声明的定义

在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样。

class A

{  

    private:

    static int count ; // 类内声明

};

int A::count = 0 ; // 类外初始化,不必再加static关键字

因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。

能在类中初始化的成员只有一种,那就是静态常量成员。

此外,还需要注意的是声明和定义的区别:

①变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。

②变量声明:用于向程序表明变量的类型和名字。

虚函数调用
#include <iostream>
using namespace std;
 
class Base {
public:
    void virtual Func() {
        cout << "Base" << endl;
    }
};
 
class Derived : public Base {
public:
    void virtual Func() {
        cout << "Derived " << endl;
    }
};
 
int main() {
    Base* pBase = new Base();
    pBase->Func();
    Derived* pDerived = (Derived*)pBase;
    pDerived->Func();
    delete pBase;
 
    pDerived = new Derived();
    pBase = pDerived;
    pBase->Func();
 
    delete pDerived;
    return 0;
}

输出:

Base Base Derived  

没有生成新的对象,调用的还是基类的函数

可重载与不可重载

 构造函数可以重载,析构函数不能重载。

如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字,此时,基类的函数被隐藏,注意,是隐藏而不是覆盖。覆盖的基本特征之一就是 基类函数必须有virtual关键字。 

基类派生类
基类重载函数有virtual函数覆盖
基类重载函数无virtual函数隐藏
重载,覆盖和隐藏再总结:

1.重载:函数名相同,参数列表不同,重载只是在类的内部实现,但是不能靠返回值来判断。

    特点:(1)相同的范围;(2)函数名字相同;(3)参数不同;(4)virtual可有可无。

2.覆盖:子类重新定义父类中相同名称和参数的虚函数,函数特征相同,但是具体实现不同,主要是在继承关系中出现。

    特点:(1)不同的范围,分别位于父类和子类中;(2)函数的名称相同;(3)参数相同;(4)基类必须有virtual。

3.隐藏:也叫重定义,是指子类屏蔽了父类与其同名的函数。

    特点:(1)如果子类的函数和父类的函数同名,但是参数不同,此时,不管有无virtual,父类的函数被隐藏。

              (2)如果子类的函数和基类的函数同名,参数也相同,若基类无virtual,则父类函数被隐藏,若有就是覆盖

抽象类

抽象类是指含有纯虚函数的类

抽象类只可以作为基类使用,纯虚函数的实现只靠派生类使用

static和const

static 改变变量的性质  全局静态变量  不会随函数的结束而释放内存

#include <stdio.h>
int fun(int a) { 
    int b = 0;    
    static int c = 3;
    b++; 
    c++; 
    return (a + b + c);
}
 
int main() {
    int i=0;
    for(; i < 3; i++) 
        printf("%d",fun(2));
    return 0; 
}

输出:
789

 func(2) 一共被执行了 3 次。func 函数中 c 为全局变量,全局变量只会赋值一次,并且不会随函数结束而释放。

第一次调用时 b 为 0 然后自增为 1,a 为 2,c 为 3 然后自增为 4,因此返回 2+1+4。

第二次调用时 b 为 0 然后自增为 1,a 为 2,c 为 4然后自增为 5,因此返回 2+1+5。

第三次调用时 b 为 0 然后自增为 1,a 为 2,c 为 5 然后自增为 6,因此返回 2+1+6。

因此输出为 789


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fighting_Six

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值