牛客C++专项训练6.8

本文介绍了C++中运算符重载的原则和规则,包括成员函数和非成员函数的运算符重载形式。同时,讨论了指针的相关概念,如常量指针、指针的赋值和函数调用。还涵盖了格式化输出和C++程序的基本结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.如果定义了一个类myclass, 则为myclass类对象以成员函数形式重载后++运算符的声明应该是:

正确答案: B   你的答案: C

A    myclass operator++()

B    myclass operator++(int)

C    myclass &operator++()

D    myclass &operator(int)

重载单目运算符++或(--)作为前缀和后缀是不同的

#include <iostream>
using namespace std;
class Complex {
private:
    double i;
    double j;
public:
    Complex(int = 0, int = 0);
    void display();
    Complex operator ++();//前缀自增
    Complex operator ++(int);//后缀自增,参数需要加int
};

Complex::Complex(int a, int b) {
    i = a;
    j = b;
}

void Complex::display() {
    cout << i << '+' << j << 'i' << endl;
}


Complex Complex::operator ++() {
    ++i;
    ++j;
    return *this;
}

Complex Complex::operator ++(int) {
    Complex temp =*this;
    ++*this;
    return temp;
}

int main()
{
    Complex comnum1(2,2), comnum2,comnum3;
    cout << "自增计算前:" << endl;
    cout << "comnum1:";
    comnum1.display();
    cout << "comnum2:";
    comnum2.display();
    cout << "comnum3:";
    comnum3.display();
    cout << endl;

    cout << "前缀自增计算后:" << endl;
    comnum2 = ++comnum1;
    cout << "comnum1:";
    comnum1.display();
    cout << "comnum2:";
    comnum2.display();
    cout << endl;

    cout << "后缀自增计算后:" << endl;
    comnum3 = comnum1++;
    cout << "comnum1:";
    comnum1.display();
    cout << "comnum3:";
    comnum3.display();

    return 0;
}

成员函数运算符重载:

函数类型 operator 运算符(参数表);

非成员函数运算符重载:

友元函数原型的格式:

friend 函数类型 operator 运算符(参数表);

运算符重载的原则

运算符重载不允许发明新的运算符。
不能改变运算符操作对象的个数。
运算符被重载后,其优先级和结合性不会改变。

不能被重载的运算符:

::    ?:   .     .*      sizeof   参考

 

2.下列描述,正确的一共有多少个?

1)const char *p,这是一个常量指针,p的值不可修改  p指向的值不能改变

2)在64位机上,char *p= “abcdefghijk”; sizeof(p)大小为12   64位机上指针为8 bytes

3)inline会检查函数参数,所以调用开销显著大于宏    内联函数会类型检查,宏只进行代码的简单替换

inline:在编译时,把函数代码直接插入到目标代码中,通过空间换取时间来提高执行效率;不存在普通函数的调用开销(现场的保护,数据的保存)。

4)重载是编译时确定的,虚函数是运行时绑定的;

正确答案: A   你的答案: A

A1

B2

C3

D4

 

3.以下程序段的执行结果是()。

double  x;x=218.82631;

printf("%-6.2e\n",x);

正确答案: C   你的答案: 空

A输出格式描述符的域宽不够,不能输出

B输出为21.38e+01

C输出为2.19e+02

D输出为-2.14e2

e: 表示要求用科学计数法表示;

-: 表示左对齐(省略或+表示右对齐);

6.2 指的是输出域宽;

6表示整个数在输出设备所在字符数为6;(超过就按实际输出,不足时看是左对齐还是右对齐,左对齐在后面补空格,右对齐在前面补空格)(这里输出的字符数是8,所有符号都算上)

2表示小数部分输出宽度为2

 

4.以下叙述中正确的是()

正确答案: A   你的答案: A

Aint* p1; int ** p2; int *p3;都是合法的定义指针变量的语句

B指针变量只能通过求地址运算符(&amp;) 来获得地址值

C语句p=NULL;与p=\0;是等价的语句     p=NULL ;和 p=0 ;或 p='\0' ;等价

D语句p=NULL;执行后,指针p指向地址为0的存储单元

语句 p=NULL; 执行后,指针 p 并不是指向地址为 0 的存储单元,而是具有一个确定的值 -" 空 " 

 

 

5.若有说明:int i, j=2,*p=&i;,则能完成 i=j 赋值功能的语句是()。

正确答案: B   你的答案: C

A i=*p;

B *p=*&j;

C i=&j;

D  i=**p;

*p = *&j; 等价于 *p = j; 等价于 i=j;

 

 

6.一个最简单的C++程序,可以只有一个(  )。

正确答案: C   你的答案: A

A库函数

B自定义函数

Cmain函数

D空函数

main函数是程序的唯一入口,也就是说程序运行时,要先从main函数开始执行。

一个程序必须有一个main函数,而且只有一个main函数。

 

7.c/c++中,有关纯虚函数说法正确的是(      )

正确答案: B D   你的答案: A B D

A子类中必须覆盖基类的纯虚函数    如果基类中的纯虚函数在子类中没有覆盖,那这个子类还是一个抽象类,不能实例化。

B含有纯虚函数的类不能被实例化

C子类中必须覆盖基类的虚函数

D含有纯虚函数的类一定是抽象类

 

8.从字符串里寻找一串字符的函数时下面哪一个?()

正确答案: B   你的答案: D

A strcmp    strcmp比较字符串str1 and str2

B strstr      strstr函数返回一个指针,它指向字符串str2 首次出现于字符串str1中的位置,如果没有找到,返回NULL

C strcat     strcat函数将字符串str2 连接到str1的末端,并返回指针str1

D strfind    strfind是MATLAB中的函数

strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL

例如:

char str2 = “cdef”; 
char str1 = “abcdefgh”; 
则通过函数,将返回 
strstr(str1,str2) = cdefgh;

如果str1不包含有str2。 
char str2 = “cxef”; 
char str1 = “abcdefgh”; 
则通过函数,将返回 
strstr(str1,str2) = NULL;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值