L9---C++真题之 改错题
2016.4真题:
1,访问权限:
子类不能用,改错public就行了.
2,初始化,定义,赋值等等.
(1)在main中, int x1=10;x2=20;---错了没有定义x2的类型,改intx1=10,x2=20;
中间分好改成逗号.
(2)在类中,不能同时初始化并赋值,例如: int x1=20; 这是错误
int a=10;
int*p=a; ------这是不正确的,p是指针,a是int值,所以类型不对.
改成: int*p=&a;
3,const应用:
(1)int *const p=&x1; ---这是错误, 指针const之后就不能在赋值了,指针必须定义设置变量或对象地址.改成 int *p=&x1;
(2)纯虚函数, virtual void fun()=0;
函数定义: void func() const;
4,友元
(1)friend void B::fun();
5,模板类,模板函数
一有这个,就必须想到template 和 class,typename 这几个关键字.
template<T>;---错误,缺少class或typename
6,函数类型
一定要记得写函数类型, int 或double
(1)改错: int Test:: x=70;
(2)填空中,如果没有提前声明i, j; 就必须 声明类型: ( int i=0;i<=10;i++)
(3)2016.10T44: 有void 就没有 return; 如果是其他 int, double 声明就必须有返回类型.
7,引用 && 指针
(1)main()函数中,直接用对象, swap(&a,&b)---这是错误的, 改为 swap(a,b);
(2)*p是指针, 不能和 int n 划等号, 但p=n; 这是可以的.
int*p2;*&p=p2;---这是可以的,但是不能声明对X的引用, int*&p=&x;--错误.
但int *p=&x;可以.
8,重载运算符: 关键字 operator
(1)s2.operator=(s1); -----operator=等同于=复制号,即 s2=s1;
(2)重载使用对象引用复制运算符: str&operator=(str& a);
重载使用指针赋值运算符: str& operator=(char *s);
str& 本身就是一个返回类型
(3) str& str:: operator=(str& a){
if(this==&a)
return *this;
delete st;
st=new char[ strlen(a.st)+1]; //重新申请一个内存
strcpy(st,a.st);
return *this;
}
重载运算符保持原有 操作数, 优先级和结合性不变
2015.10 T41:
return p; 错误, 声明的是 int *p; 应该返回变量, return *p;
2015.10 T43:
x=5; 错误,复制形式错误,应改为 int A::x=5; 返回类型在前面.
2015.10 T44:
const A a(4);
a.set(6); -------错误, 已经const 了就不能在赋值,变量才能赋值.