C++学习笔记1

本人是是大一学的C,现在大二新开了C++。于是便开始入手C++。所以一开始就没有无所谓的基本的总结。直接是从C过渡到C++。看的是大哥的视频。只想说:大哥的视频不是叼!!是碉堡了!!!附上视频地址:https://ke.qq.com/course/115806#term_id=100125780

学C++的赶快去看吧,你值得拥有!!

 

对C++的初步认识

 C++中区分大小写,但是在window下头文件不区分大小写。

封装性:把数据和方法联系在一起形成一个具有类特征的对象,封装好的对象就具有明确的功能和方便的接口,以便其他类型引用。另外封装的对象也有各种访问权限,防止被外界非法获取或更改。

继承性:同类事物具有共同性,在同类事物中每个事物又具有特殊性。运用抽象的原则舍去对象的特殊性,抽象其共同性,则得到一个适应于一批对象的类,被称为基类(父类),而把具有次特殊性的类成为派生类(子类)。派生类的对象拥有其基类的全部或部分属性与方法,成为派生类对基类的继承。

多态性:对同一种消息,多个对象有完全不同的表现行为。即一个对外接口,多个内在实现方法。

 

1. 在C中不支持表达式做左值, 即在C中a=b=100可以,但(c=d)=200不可以,因为(c=d)为表达式。在C++中表达式可以被赋值。

a=b=100;//运算过程:先将100赋给b,然后再将b赋给a,此代码在C中也可以。

(c=d)=200;//运算过程:先将d赋给d,再将200赋给c。等价于c=d;c=200,此代码只能在C++中通过。

 

2.关于常量、指针常量的初步认识

const int a=100;
    int b=a;
    /*const int * const pa;//error
    第一个const定义的是pa所指向的变量为常量,其值不能改变,所以应在定义时初始化,否则以后不能初始化,但可以编译过去。
    第二个const定义的是指针pa为常量,其值不能改变,所以会报错。
    正确写法:const int * const pa=&a;
    */
    const int *pa;//此行只是定义pa指向的变量为常量,所以指针可以被赋值。
    pa=&a;
    //*pa=50;//error  此时pa所指向的变量a为常量,不能修改其值。
    //int *pb=pa;//error  指针pa所指向的变量为常量,而pb所指向的则是一个变量,其类型不一样,不能将两个不一样类型变量的地址赋值。
    const int *pb=pa;//此时将pb指向的变量定义为常量,则可以。
    cout<<*pa<<endl<<*pb<<endl;

 

3.string

(1)string用于定义声明字符串变量。

(2)其定义声明与普通类型声明一样,初始化的方式:

                          1.string  变量名=“字符串常量”;

                          2.string  变量名(“字符串常量”);

                          3.string  变量名(整数,“字符串常量”);     此初始化方式理解:将字符串常量以整数为倍数,几倍初始到变量名中。如:string  a(3,"a");    字符串变量a中有3个a。

(3)字符串之间的连接用+。

(4)size()成员函数:用于返回string对象大小(包含的字符数,包括空格)的无符号整型值。用成员选择运算符(.)调用。

(5)索引string对象:用下标运算符([]),可像字符数组一样访问字符串中的任意一个字符。其下标也是从0开始。

(6)find()成员函数:用于检查两个字符串字面值是否含有相同的字符。该函数返回值是要搜索的string对象在调用string对象中第一次出现的位置。其返回值总是比真实位置少1(因为其下标是从0开始,即若查找的字符串值在第4位出现,则返回值为3.)。若没找到,则返回string中定义的一个特殊常量,该常量通过string::npos来访问。(即if(a.find("bb")==string::npos){cout<<"未找到";})。

可向find()提供一个可选实参用于指定其查找起始位置。:a.find("bb",3);从字符串a第三个位置开始查找。

(7)erase()成员函数:从字符串中移除指定的子字符串。

调用该成员函数的形式:字符串对象.erase(位置,长度); 如:a.erase(2,3);     移除字符串a中从位置2开始长度为3的子字符串。

(8)empty()成员函数:该成员函数返回bool类型值,若为空,返回true。为假返回false。

 

4.C++的输入输出

C++流默认输出是6位

cin、cout为类对象,scanf、printf为函数
对于实型,cout 默认输出六位有效数据。
setw()用于指定域宽,头文件为iomanip。
setiosflags(ios::left)用于左对齐输出。
setprecision(n)<<setiosflags(ios::fixed)合用,可以设置小数点右边的位数。n表示小数位数。
setfill("字符")用于指定字符填充,其为全局。

 

 注意 : 默认的cout输出是十进制,
           但当改变格式输出后,其默认则不再起效,输出格式变成最后的格式。
           当程序结束关闭再次打开时则还是默认为十进制输出。

    int a;
    cout<<"输入一个数:";
    cin>>a;
    cout
        <<"默认输出:"
        <<a<<endl;
    cout
        <<"十进制输出:"
        <<dec<<a<<endl;
    cout
        <<"八进制输出:"
        <<oct<<a<<endl;
    cout
        <<"十六进制输出:"
        <<hex<<a<<endl;
    cout
        <<"此时再用默认输出时,其默认输出指定为最后一次的格式输出"<<endl
        <<"默认输出:"
        <<a<<endl;
    cout
        <<"指定域宽输出:"<<endl
        <<setw(8)<<dec<<a<<endl;
    cout
        <<"左对齐输出:"<<endl
        <<setw(8)<<setiosflags(ios::left)<<a<<endl;

5. 函数重载

重载和默认参数不能同时使用。

函数重载原则:函数名相同、函数参数表不同(参数类型、参数个数、参数顺序)
函数返回类型不同不能构成重载。
匹配重载函数原则:
严格匹配,找到则调用。
通过隐式转换寻求一个匹配,找到则调用。
注意:
int到long和double,double到int和float隐式类型转换
遇到这两种情况则会出现二义性导致错误。
重载的原理:利用倾轧技术,将函数名进行倾轧。
倾轧发生在两个阶段:.cpp编译阶段和.h的声明阶段,
只有两种阶段同时进行才能匹配调用。
避免倾轧的方法:在函数前加extern "C"

int print(int a)
{
    cout<<"参数是数字"<<endl;
    return 0;
}


int print(char b)
{
    cout<<"参数是字符"<<endl;
    return 0;
}

int print(char b,int a)
{
    cout<<"参数是字符、数字"<<endl;
    return 0;
}

int print(int a,char b)
{
    cout<<"参数是数字、字符"<<endl;
    return 0;
}

6.运算符重载

运算符重载:其本质就是定义了一个函数,用operator关键字定义。

struct COMP
{
    float real;
    float image;
};

COMP operator+(COMP one,COMP another)
{
    one.image+=another.image;
    one.real+=another.real;
    return one;
}

int chongzai()
{    
    COMP num1={1,2};
    COMP num2={3,5};
    COMP sum=num1+num2;
    cout<<"("<<sum.real<<","<<sum.image<<")"<<endl;
    return 0;
}

7.引用
1.引用没有定义,是一种关系型声明。
声明它和原有某一变量(实体)的关系。故而类型
与原类型保持一致,且不分配内存。与被引用的变量有相同的地址。
2.声明的时候必须初始化,一经声明,不可变更。
3.可对引用,再次引用。多次引用的结果,是某一变量具有多个别名。
4.不能建立引用的引用,但可以对引用再次引用。【int &rb=ra】
可以对引用取地址【int *p=&ra】

常引用:
const 不可改变,不可通过指针或引用去改变。
const 对象的引用必须是const 的,将普通引用绑定到const 对象是不合法的。
const 引用可使用相关类型的对象(常量,非同类型的变量或表达式)初始化。

使用const的原因:
1,使用const 可以避免无意修改数据的编程错误。
2,使用const 可以处理const 和非const 实参。否则将只能接受非const 数据。
3,使用const 引用,可使函数能够正确的生成并使用临时变量(如果实参与引用参
数不匹配,就会生成临时变量)

int a=4;

const int b=5;
nt &ra=a;
//const int *p=a;//error const 对象的引用必须是const 的
const int &rb=b;
cout<<"a="<<a<<endl<<"ra="<<ra<<endl;
cout<<"b="<<b<<endl<<"rb="<<rb<<endl;

 

posted @ 2016-03-13 16:23  Sayer  阅读(175)  评论(0编辑  收藏  举报