PTA错题&c++复习

2-8以下对类A的定义中正确的是() (2分)

A.class A{private:int v;public : void Func(){}}
B.class A{private : int v;A *next;};
C. class A{int v;public:void Func();};A::void Func(){}
D.class A{int v;public: A next;void Func(){ }};


> AC缺分号,一定要注意
> C(正确)class A{int v;public:void Func();};void A::Func(){};(要注意成员函数的定义方式)
> D(正确)class A{int v;public: A *next;void Func(){ }};

2-4设A为自定义类,现有普通函数int fun(A& x)。则在该函数被调用]时: (2分)

A.将执行复制构造函数来初始化形参x
B.仅在实参为常量时,才会执行复制构造函数以初始化形参x
C.无需初始化形参x
D.仅在该函数为A类的友元函数时,无需初始化形参x

> 解析:引用仅是变量的别名,而不是实实在在地定义了一个变量,因此引用本身并不占用内存,而是和目标变量共同指向目标变量的内存地址.引用仅是变量的别名,而不是实实在在地定义了一个变量,因此引用本身并不占用内存,而是和目标变量共同指向目标变量的内存地址.

2-3在下面类声明中,关于生成对象不正确的是( )。
class point
{ public:
int x;
int y;
point(int a,int b) {x=a;y=b;}
}; (2分)

A.point p(10,2);
B.point *p=new point(1,2);
C.point *p=new point[2];
D. point *p[2]={new point(1,2), new point(3,4)};

> []会警告但不会报错
> new申请动态内存
> 无默认参数,参数不够故c错

 

 

下面对静态数据成员的描述中,正确的是 (2分)

A.静态数据成员是类的所有对象共享的数据
B.类的每个对象都有自己的静态数据成员
C.类的不同对象有不同的静态数据成员
D.静态数据成员不能通过类的对象调用,只能通过“类名::标识符”调用


> 正确答案:A
> 所有对象都有同一个静态数据成员

表达式 “new int”的返回值类型是? (2分)

A. int
B.int *
C.int &
D.无法确定

> new的都是指针

下列选项哪一个是正确的? (2分)

A. char *p=new int; p='a'; delete p;
B.int *p=new int[25]; p[10]=100; delete p;
C.char *p=new char[10]; p[0]='k'; delete [ ] p;
D.char *p=new char; p[0]='k'; delete p;

A.int和'a'不符合;B.delete数组;D.char型哪来的p[0]

下列有关类型兼容规则的描述中,错误的是: (2分)
派生类的对象可以隐含转换为基类对象
派生类的对象可以初始化基类的引用
派生类的指针可以隐含转换为基类的指针
派生类的对象可以被基类的对象初始化

类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。类型兼容规则中所指的替代包括以下情况:
1、派生类的对象可以赋值给基类对象;
2、派生类的对象可以初始化基类的引用;
3、派生类对象的地址可以赋给指向基类的指针。
在替代之后,派生类对象就可以作为基类的对象使用,但是只能使用从基类继权承的成员。
类型兼容规则是多态性的重要基础之一。

若obj是类D的对象,则下列语句中正确的是 (2分)

class B{
private: void fun1(){ }
protected: void fun2(){ }
public: void fun3(){ }
};
class D : public B {
protected: void fun4(){ }
};

 A.fun1();
 B.obj.fun2();      
 C.obj.fun4();
 D.obj.fun3();

protected中的成员只能被类中函数访问

 

下列关于运算符重载的描述中,( )是正确的。 (2分)

A.运算符重载可以改变操作数的个数

B.运算符重载可以改变优先级

C.运算符重载可以改变结合性

D.运算符重载不可以改变语法结构

[解析] 运算符重载不能改变运算符的语法规则、优先级、结合性和操作数个数。运算符重载不能创造新的运算符。

2-10

设有如下代码段: (2分)

class A {
public:
    void func1() {
        cout << "A1" << endl;
    }
    virtual void func2() {
        cout << "A2" << endl;
    }
};
class B : public A {
public:
    void func1() {
        cout << "B1" << endl;
    }
    void func2() {
        cout << "B2" << endl;
    }
};

int main() {
    A *a = new B;
    a->func1();
    a->func2();
}

则输出结果为:

A.A1 A2

B.A1 B2

C.B1 A2

D.B1 B2

创建一个B类空间赋值给A类的一个指针

2-11

下面关于基类与派生类的叙述中,不正确的是____。(2分)

A.派生类一般都用公有派生

B.对基类成员的访问必须是无二义性的

C.赋值兼容规则也适用于多重继承的组合

D.基类的公有成员在派生类中仍然是公有的

D派生方式啊!!!!别把它忘了啊

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值