A 函数名相同,参数类型或个数不同
B 函数名相同,返回值类型不同
C 函数名相同,函数内部实现不同
D 函数名称不同
正确答案:A
函数重载:在相同作用域中,函数名字相同,参数列表不用的一系列函数
参数列表不同的具体体现:参数个数不同 参数类型不同 类型的次序不同
注意:与函数返回值类型是否相同没有关系。
A 引用必须初始化,指针不必
B 引用初始化以后不能被改变,指针可以改变所指的对象
C 不存在指向空值的引用,但是存在指向空值的指针
D 一个引用可以看作是某个变量的一个“别名”
E 引用传值,指针传地址
F 函数参数可以声明为引用或指针类型
正确答案:E
B
int main(){int a = 10;int& ra = b;//引用初始化以后不能被改变int b = 20;ra = b;&a = b;//err//指针可以改变所指的对象,只要不是const类型的指针int* p = &a;p = &b;return 0; }
E
引用的底层是使用指针来实现的,引用的本质就是一个指针
void swap(int& left,int& right)
{int temp = left;left = rught;right = temp;
}int main()
{int a = 10;int b = 20;swap(a,b);return 0;
}
A 所有类成员
B private或protected的类成员
C public的类成员
D public或private的类成员
正确答案:C
#include
using namespace std;
class Sample{
public:
Sample(int x){
________
}
~Sample(){
if(p) delete p;
}int show(){
return *p;
}
private:
int*p;
};
int main(){
Sample S(5);
cout<
A *p=x;
B p=new int(x);
C *p=new int(x);
D p=&x;
正确答案:B
AC:p都没有指向怎么解引用
D: x是构造函数的参数,p会指向非法空间,delete时会出现问题
A 用一个对象去初始化同一个类的另一个新对象时 1
B 将类的一个对象赋值给该类的另一个对象时 a1 = a2;此处调用的是赋值运算符重载,a1是已经存在的对象
C 函数的形参对象,调用函数进行形参和实参结合时 2
D 函数的返回值是类的对象,函数执行返回调用时 3
正确答案:B
概念:是一个特殊的构造函数,是单参,参数的类型必须是类类型& 一般情况下会用const进行修饰
A(const A& a)
调用时机:当用已经存在的对象构造新对象时,编译器会自动调用拷贝构造函数
场景:
//1
A a1;
A a2(a1);//拷贝构造函数//2
void Fun(A a)//传参时也会调用拷贝构造函数
{}//3
A fun()
{A a;return a;
}
Widget f(Widget u)
{
Widget v(u);
Widget w=v;
return w;
}
main(){
Widget x;
Widget y=f(f(x));
}
A 1
B 3
C 5
D 7
正确答案:D
y对象的构造将来也需要调用构造函数
内部的f(x)的结果需要当做外部f(x)的参数
注意:当函数返回值是类类型对象时,编译器可能会对返回值类型进行优化
A 一元运算符
B 二元运算符
C 选项A)和选项B)都可能
D 重载错误
正确答案:D
当用户定义了一个类之后,想要通过该类的对象直接使用某种运算符——编译器不支持
原因:类对象中可能有多个成员,在用该类的对应进行相应的运算符操作时,该如何处理,编译器无法判断。
这种时候需要进行运算符重载:
重载成类的成员函数——形参数目看起来要比运算符需要的参数个数少1——因为成员函数有隐藏的this指针
重载成类的友元函数——必须有一个参数也是类类型的对象
class A;
class B;
int main() {
A a;
B b;
return 0;
}
A b构造 - a构造 - a析构 - b析构
B a构造 - a析构 - b构造 - b析构
C b构造 - a构造 - b析构 - a析构
D a构造 - b构造 - b析构 - a析构
正确答案:D
先构造的后析构
构造顺序按定义顺序
#include
using namespace std;
class cla {
static int n;//共享,n = 0
public:
cla() { n++; }
~cla() { n--; }
static int get_n() { return n; }
};
int cla::n = 0;int main() {
cla* p = new cla;//new了一个对象,调用构造函数 n++ 1
delete p;//销毁空间 n-- 0
cout << "n=" << cla::get_n() << endl;
return 0;
}
A n=3
B n=4
C n=1
D n=0
正确答案:D
A 内存泄露是内存管理中的常见问题
B 悬挂引用指的是对某个对象的应用实际上指向一个错误的内存地址
C 在C、C++等系统语言中,有自动的内存管理机制,不需要考虑内存管理的问题
D 程序的动态性越强,内存管理就越重要,内存分配程序的选择也就更重要
正确答案:C
链接
考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法:
1.根据字符串的字典序排序。例如:
“car” < “carriage” < “cats” <
"doggies < “koala”
2.根据字符串的长度排序。例如:
“car” < “cats” < “koala” <
“doggies” < “carriage”
考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙验证。
输入描述:
输入第一行为字符串个数n(n ≤ 100)
接下来的n行,每行一个字符串,字符串长度均小于100,均由小写字母组成
输出描述:
如果这些字符串是根据字典序排列而不是根据长度排列输出"lexicographically",
如果根据长度排列而不是字典序排列输出"lengths",
如果两种方式都符合输出"both",否则输出"none"
示例1:
输入
3
a
aa
aaa
bbb
输出
both
正确答案:
#include
#include
#include
using namespace std;int main()
{int n;cin>>n;vector v;v.resize(n);for(auto& str : v){cin>>str;}bool lsort = true,csort = true;for(int i = 1;iif(v[i-1].size() > v[i].size()){lsort = false;break;}}for(int i = 1;iif(v[i-1] > v[i]){csort = false;break;}}if(lsort && csort)
cout<<"both"<
链接
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
数据范围:
输入描述:
输入两个正整数A和B。
输出描述:
输出A和B的最小公倍数。
示例1:
输入
5 7
输出
35
示例2:
输入
2 4
输出
4
思路一:暴力枚举法
从两个数中较大的数开始,逐个进行判断,能够被两个数都整除,则第一个就是最小公倍数
正确答案:
#include
using namespace std;int main()
{int a,b,m;while(cin>>a>>b){m = max(a,b);while(1){if(m%a == 0 && m%b == 0){cout<
思路二:更优解
两个数的最小公倍数,就是两个数的乘积,除以最小公约数
最小公约数:辗转相除法
正确答案:
#include
using namespace std;int gcd(int a, int b)
{ int r;
while(r = a%b){
a = b;
b = r;
} return b;
} int main()
{ int a,b;
while(cin >> a >> b){
cout << a*b/gcd(a,b) <
上一篇:达梦数据库在不修改SQL的情况下为SQL指定HINT
下一篇:操作系统的主要功能