c++要点复习

这里就不管你c语言的了,默认有c语言基础,仅整理一些c++特有的嘿嘿嘿。

1.

//从函数返回数组(这里我容易出错)
int * getRandom( )
{
  int arry[100];
//

//

  return arry;

}

2.string 和string 类

string和c里面的一样,引入cstring头文件。有strcat()连接,strcpy()复制,strlen()长度,strcmp()比较大小等函数。

string类要引入string 头文件,是一个类,可以直接定义一个字符串 :string str="hello"。(这个在cstring里面还需要东易成一个字符串数组char str1[10] = "Hello";)。string类还可以直接str1+str2连接,相当于strcat(str1,str2)。

3.引用

作函数参数:void func(int& x, int& y);可以对实参的存储单元进行修改,即函数返回后实参可以被修改了。

作函数返回值:

float &func(float r){ //&说明返回的是temp的引用,换句话说就是返回temp本身

     temp=r*r*3.14;

     return temp;

}

3.<iomanip>,setw ()字段宽度设置,设置输出的域宽,当后面紧跟着的输出字段长度小于n的时候,在该字段前面用空格补齐;当输出字段长度大于n时,全部输出。

setprecision()控制显示浮点数值的有效数的数量(自动四舍五入)

setfill('c')设置用字符c作为填充字符

left设置输出左对齐

right设置输出右对齐

 

=============================================================================================

1.copy构造

classname (const classname &obj) { // 构造函数的主体 }

obj 是一个对象引用,该对象是用于初始化另一个对象的。

2.友元函数

friend istream &operator>> (istream &is,Class &c); //重载输入输出运算符

friend ostream &operator<< (ostream &os,const Class &c);

这里注意,因为cout类的opetator<<函数的源码无法改变,所以无法重载为类的成员函数;

操作符重载过程中,需要用的类的成员变量,与iostream标准库兼容的输入输出运算符必须是普通的非成员函数,而不能是成员函数,否则它们的左侧运算对象将是我们类的一个对象。可以重载为友元或全局。

3.运算符重载

令运算符重载函数作为类的成员函数在调用时只需输入一个被操作数参数即可,另一个操作数参数则不需要输入;令运算符重载函数作为类的友元函数在调用时不仅要求输入被操作数参数,还要求输入被操作数参数。直接写成全局函数也行。

  1. Point operator+(const Point &a){ //类内重载,运算符重载函数作为类的成员函数
        Point ret;
        ret.x = this->x + a.x;
        ret.y = this->y + a.y;
        return ret;
    }
  2.Point operator+(const Point &a,const Point &b){//类外重载,运算符重载函数作为类的友元函数
    Point ret;
    ret.x = a.x + b.x;
    ret.y = a.y + b.y;
    return ret;
}
std::ostream& operator<<(std::ostream& os, const Person& person)
{
    os << "person.height=" << person.height;
    return os;
}

std::istream& operator>>(std::istream& is, Person& person) 
{
    is >> person.height;
    if (!is) {
        person.height = 0;
    }
    return is;
}

注意,C++规定,下标运算符[]必须以成员函数的形式进行重载,该重载函数在类中的声明格式如下:

    返回值类型 & operator[] (参数列表);

int &ClassA::operator[](int i){  //定义下标运算符 [] 重载函数 
	if(i<0||bi>=LEN){    //数组的边界检查 
		cout<<"Bad subscript!\n";
		exit(1);
	}
	return arr[i];//arr是类的一个数组成员
}

  

4.this指针

在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。 

return this与return* this:this是指向自身对象的指针,*this是自身对象。

return *this返回的是当前对象的克隆或者本身(若返回类型为A, 则是克隆, 若返回类型为A&, 则是本身 )。

return this返回当前对象的地址(指向当前对象的指针)

5.静态成员变量

类内声明:static int objectCount;

类外初始化:int Class::objectCount = 0;

静态成员函数:static int getCount() { return objectCount; }

6.继承

class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};

class Rectangle: public Shape{

};

虚继承:

class B:virtual public A{

};

C++编译系统在实例化一个子类时,
只会将虚基类的构造函数调用一次,
忽略虚基类的其他派生类对虚继承的构造函数的调用,
从而保证了虚基类的数据成员不会被多次初始化。

7.多态:https://blog.csdn.net/fuyuehua22/article/details/40742627?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-4

这里很综合,看看大佬们写的吧还是,然后看看相关题目做一做。

8.STLhttps://www.runoob.com/cplusplus/cpp-stl-tutorial.html

这里主要掌握一个vetor就行了。

9.类模板

template <类型参数表>
class 类模板名{
    成员函数和成员变量
};

类模板名<真实类型参数表> 对象名(构造函数实际参数表);

template <class T1,class T2>
class Pair
{
public:
    T1 key;  
    T2 value; 
    Pair(T1 k,T2 v):key(k),value(v) { };
};

int main()
{
    Pair<string,int> student("Tom",19); //实例化出一个类 Pair<string,int>
    cout << student.key << " " << student.value;
    return 0;
}

10.algorithm库常用函数

max()

min()

swap()数值交换

sort()默认是从小到大排序的。参数分别是数组的(首地址,末地址)。



int arr[10]={9,6,3,8,5,2,7,4,1,0};
sort(arr,arr+10)


int a=1, b=2;
swap(a,b);

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值