A
函数重载的条件:在相同作用域,函数名字相同,参数列表不同的一系列函数。
参数列表包括:参数个数不同、参数类型不同、类型顺序不同。
E
A:声明指针时不需要初始化,在访问前让其是合法访问的就可以。
B:如果ra是a的别名,ra=b;是指把b的值赋给ra,ra仍是a的引用,不能被改变
E:引用在底层是使用指针来实现的,引用的本质就是一个指针。
B
B
调用时机:
一、用类对象构造另一个类对象
A a1;A a2(a1);
二、传递参数
void Func(A a){};
三、返回值
A Func(A a){ return a};
D
构造x,
1:x作为参数,拷贝给u
2:v用u构造
3:w用v构造
4:w拷贝给临时变量返回
5:f(x)传给u
6:v用u构造
7:w用v构造
8:w拷贝给临时变量返回
9:用该返回值构造y
但是编译器会将 第四步的临时变量直接做参数u给下一次调用 少调用一次。
在第九步时,直接用第八步的临时变量 少调用一次
D
一元是指有一个参数,二元是指有两个参数
运算符重载有两种情况:
一、重载成类的成员函数。需要的形参个数是看到的形参个数+1,默认有this指针做第一个参数。
二、重载成类的友元函数。需要的形参个数等于看到的形参个数,且至少有一个参数是类类型的对象
D
先定义的后析构。先构造全局对象,在构造局部静态对象,最后才构造普通对象,然而析构对象的顺序是完全按照构造的相反顺序进行的
D
cla *p=new cla;//调用一次构造 n =1
delete p;//调用一次析构 n=0
此时调用函数 返回0
C
静态性:编译阶段就确定了
动态性:多态
悬挂引用
void swap(int& left,int& right)
{
int tmp=left;
left=right;
right=tmp;
}
int main()
{
int a=10;
int* p=NULL;
swap(a,*p);
return 0;
}
这里编译不报错,因为*p仅是拿到了地址,并未操作。进入到swap函数中将right赋值给left时进程退出。
编程题
求最小公倍数
思路:求最小公倍数的公式为 两数相乘/最小公约数
#include <iostream>
using namespace std;
int gcd(int a,int b)
{
if(b==0) return a;
else
{
return gcd(b,a%b);
}
}
int main()
{
long long a,b;
cin>>a>>b;
cout<<a*b/gcd(a,b)<<endl;
return 0;
}
两种排序方法
思路:阅读理解
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
int n;
cin>>n;
vector<string>v(n);
for(auto& str:v)
{
cin>>str;
}
bool Lsort=true;
bool Csort=true;
for(int i=1;i<n;i++)
{
if(v[i-1]>v[i])
{
Csort=false;
break;
}
}
for(int i=1;i<n;i++)
{
if(v[i-1].size()>v[i].size())
{
Lsort=false;
break;
}
}
if(Csort==true&&Lsort==true)
{
cout<<"both"<<endl;
}
else if(Csort==true&&Lsort==false)
{
cout<<"lexicographically"<<endl;
}
else if(Lsort==true&&Csort==false)
{
cout<<"lengths"<<endl;
}
else
{
cout<<"none"<<endl;
}
return 0;
}