【自学】C++-基础

本文介绍了C++中的泛型编程,如模板的使用,以及C++98标准带来的异常处理、RTTI和STL。还讨论了C++中的命名空间机制,用于解决名称冲突问题,并详述了面向对象的三大特点——封装、继承和多态。此外,提到了C++相对于C语言的扩展,如更严格的类型系统和三目运算符的增强。
摘要由CSDN通过智能技术生成

1.泛型编程:应用与模版,可以实现一个接口可以处理多种数据类型。

2.c++标准:c++98、描述了已有的 c++特性,还对语言进行了扩展,添加了异常、运行阶段类型识别(RTTI)、模板和标准模 板库(STL).

3.之前的cpp头文件是xx.h,现在是cpp头文件是xx,也可以是cxx

例:


#include <iostream>//标准输入输出头文件
using namespace std;//命名空间(cout,cin..)
int main(int argc, char *argv[])
{
    //cout输出设备   endl换行符
    cout << "Hello World!哈哈" << endl;
    //cin输入
    int num;
    int num1;

    cin>>num>>num1;//cin输入,如果获得多个变量,空格分割
    cout<<"num="<<num<<endl;
    cout<<"num1="<<num1<<endl;
    return 0;
}

一、面向对象的三大特点

1.封装:类将成员变量和成员函数封装在类的内部,根据需要设置访问权限,通过成员函数管理内部状态;

2.继承:所表达的是类之间相关的关系,这种关系使得对象可以继承另外一类对象的特征和能力;

继承的作用:避免公用代码的重复开发,减少代码和数据冗余。

3.多态:同一个函数可以处理不同类型的数据,有多个功能。

二、C++较C的扩展

2.1::作用域运算符

作用:①解决局部变量与全局变量的重名问题

②注意二义性问题

如果全局和局部都有同一变量,在局部变量作用域下,局部变量的优先级较高;

三、命名空间

Namespace:命令空间、名字空间、名称空间

解决问题:解决名称冲突问题。

定义格式:

Namespace A{

Int a;

Int c;

}

注意:①不能定义到函数内部,只能定义到全局。

②命名空间可以嵌套

③命名空间增加变量是开放的,namespace可以嵌套函数、变量、符号常量、结构体也可以嵌套另一个namespace

#include <iostream>
using namespace std;
namespace A {
    int a=2;
    int b=3;
    int c=4;
    namespace B {
    int d=6;
    }
    void fun(void){
        cout<<"fun is run"<<A::a<<endl;
    }
}
namespace A {
int num=10;
}
int main(int argc, char *argv[])
{
    cout << A::a << endl;
    cout << A::b << endl;
    cout << A::c << endl;
    cout << A::B::d << endl;
    cout << A::num <<endl;
    A::fun();
    return 0;
}

 

④命名空间可空间内定义,外部声明。

命名空间函数的定义必须加上命名空间的作用域

⑤无名命名空间(尽量不使用、可能跟全局变量,)

无名命名空间,意味着命名空间中的标识符只能在本文件内访问,相当于给这个标 识符加上了 static,使得其可以作为内部连接

取别名:

namespace veryLongName{

 int a = 10;

 void func(){

cout << "hello namespace" << endl;

}

 }

void test(){

 namespace shortName = veryLongName;

cout << "veryLongName::a : " << shortName::a << endl;

veryLongName::func();

shortName::func();

}

⑥using 编译指令使整个命名空间标识符可用.

注意:使用 using 声明或 using 编译指令会增加命名冲突的可能性。也就是说,如 果有名称空间,并在代码中使用作用域解析运算符,则不会出现二义性。

也可以是函数。

发现某一个实现文件中有太多的 using 指令而产生的命名 冲突,就要对该文件做个简单的改变,通过明确的限定或者 using 声明来消除名字 冲突,这样不需要修改其他的实现文件。

四、(C++较C语言)全局检测增强

声明不能省略extern

五、C++中所有的变量和函数都必须有类型

**C语言函数参数如果为空,可以传递任意个数,类型的参数,函数内部不可用;

**C语言函数参数如果是void,不可用传参

**C语言函数参数可以无类型,可以传递类型的参数

**C++形参空着和加void都一样,都代表不能传参,C++形参不可无类型

函数返回值也要有类型。

5.1严格的类型转换

1.在 C++,不同类型的变量一般是不能直接赋值的,需要相应的强转。

例:C++中给枚举变量赋值

2.struct类型加强:c 中定义结构体变量需要加上 struct 关键字,c++不需要。

  c 中的结构体只能定义成员变量,不能定义成员函数。c++即可以定义成员变量, 也可以定义成员函数

3.C++结构体中可以定义函数,但是C语言不行。

5.2bool类型关键字

1.准 c++的 bool 类型有两种内建的常量 true(转换为整数 1)和 false(转换为整数 0)

2.bool 类型占 1 个字节大小

3.给 bool 类型赋值时,非 0 值会自动转换为 true(1),0 值会自动转换 false(0)

5.3三目运算符增强

1.c 语言三目运算表达式返回值为数据值,为右值,不能赋值

2.c++语言三目运算表达式返回值为变量本身(引用),为左值,可以赋值。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值