C++16 --- C++相关试题及相关知识点整理

一、填空题()

1.派生类的主要用途是可以定义其基类中_______。
2.当建立_______,程序自动调用该类的构造函数。
3.定义重载函数时,应在_______上有所不同。
4.类是用户定义的类型,具有类类型的变量称作_______。
5.当一个成员函数被调用时,该成员函数的_______指向调用它的对象。
6.拷贝构造函数通过_______使用引用来初始化创建中的对象。
7.在C++中有二种_______方式即值传递和_______传递。

答案:

1、同名同参的虚函数
2、对象/本类对象
3、参数列表 
4、对象
5、this指针
6、通过本类对象
7、参数传递方式、引用

1、同名同参的虚函数

相当于将同名同参是虚函数重新写了一下,主要是为了虚函数的实现多态,派生类通过定义基类,把基类中同名同参的虚函数重新定义之后,就可以去实现多态

2、对象/本类对象

对象。建立对象调用该类对象的构造函数。调用构造函数的步骤分为三部:传参、根据数据成员在类里面的声明顺序开辟空间、执行构造函数函数体。有继承和组合的时候:先按照继承顺序调用基类的构造、按照组合顺序调用组合的构造、调用自身的构造。

3、参数列表 (包括参数的类型、个数、顺序)

函数重载的规则:

函数名称必须相同。
参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
函数的返回类型可以相同也可以不相同。
仅仅返回类型不同不足以成为函数的重载。

函数重载相关知识点博客链接:http://t.csdn.cn/Ne3MG

4、对象

类与对象的区别:

类是抽象出来的,在内存中不占空间。
对象是类的实例化,具体化,需要占空间。

5、this指针

类的非静态成员成员函数有一个隐藏的this指针,静态成员函数是没有this指针的。

6、通过本类对象

即拷贝构造函数的参数就是本类对象的引用。
1)拷贝构造函数的参数类型:
值类型、指针类型、引用类型
2)调用拷贝构造函数的三种情况:
用一个本类的旧对象去构造另一个本类的新对象。
类类型的值传递
返回类型为值传递的时候,会调用拷贝构造。
浅拷贝(无指针,直接调用默认拷贝构造函数)和深拷贝(有指针)

7、参数传递方式、引用

二、完成程序题()

1、在下面程序的底画线处填上适当的字句,使该程序执行结果为60。

# include <iostream.h>  
class base{int X;  
publicvoid int (int initX){X=initX; }  
int  Getnum() {return  X+7; }  
void main()  
{_______  
_______  
cout<<test.Getnum();  
}  
base test;
test.init(53);

2、在下面程序的底画线处填上适当的字句,完成类中成员函数的定义。

# include <iostream.h>  
class box{     privateint color;int upx,upy;int lowx,lowy;  
publicfriend int same_color(line a,box b);  
_______;  
void define_box(int x1,int y1,int x2,int y2){upx=x1;upy=y1;}  
};  
class line{    privateint color;int startx,starty;int len;  
public∶  
friend_int same_color(line a,box b);  
_______;  
void define_line(int x,int y){startx=x;}  
};  
int same_color(line a,box b)  
{if(a.color= =b.color)  
return 1;  
return 0;}  
void set(int c){color = c;}
void set(int c){color = c;}

friend int same_color(line a,box b); 可知,该为一个友元函数,为一个普通函数。

3、在下面程序的底画线处填上适当的字句,完成程序。

# include <iostream.h>  
class A{   
_______(int i){cout<<i<<endl;}  
void g(){cout<<”g\n”;}  
}; 
closs B∶A{   
publicvoid h(){cout<<”h\n”;}  
_______;  
};  
void main(); 
{   B d1;  
d1.f(6);  
d1.h();  
}  

virtual void f
void f(int i){cout<<"i"<<endl;}

构成多态

4、在下列程序的空格处填上适当的字句,使输出为:0,8,5。

# include <iostream.h>  
# include <math.h>  
class Magic{  
double x;  
publicMagic(double d=0.00)x(fabs(d)){}  
 Magic _______{return Magic(sqrt(x*x+c.x*c.x));}  
_______<<(ostream & os,Magic c){return os<<c.x;}  
};  
void main()  
{Magic ma;  
cout<<ma<<,<<Magic(-8)<<,<<ma+Magic(-3)+Magic(-4);  
}  

operator+(Magic &c)
friend ostream& operator  //这里需要在类外定义

三、问答题()

1、简述引用和指针

引用和指针的区别:
1、初始化:
引用声明的时候必须要初始化,指针可以不初始化,但会出现野指针;
2、NULL;
引用在初始化的时候不能初始化为NULL,但指针可以初始化为NULL;
3、修改:
引用一旦和实体相关起来就不可以修改,指针可以改变;
4、大小:
引用的大小和实体大小一样,指针大小永远是4字节;

相同点:都能通过所关联的变量修改关联的值:

2、C++的三大特性是什么?请简单描述。

3、谈谈对this指针的理解。

1)定义

在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。

2)this只能在成员函数中使用

成员函数默认第一个参数为T* const register this。
(友元函数,全局函数不是成员函数)

3)this指针不能再静态函数中使用

静态函数如同静态变量一样,他不属于具体的哪一个对象,静态函数表示了整个类范围意义上的信息,而this指针却实实在在的对应一个对象,所以this指针不能被静态函数使用。

4)this指针的创建

this指针在成员函数的开始执行前构造的,在成员的执行结束后清除。

5)this指针只有在成员函数中才有定义。

创建一个对象后,不能通过对象使用this指针。也无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。当然,在成员函数里,你是可以知道this指针的位置的(可以&this获得),也可以直接使用的。
————————————————
版权声明:本文为CSDN博主「我是一名好学者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43751983/article/details/91147918

四、综合应用题()

1、分析下列程序可能的输出结果。

# include “iostream.h”  
class test{privateint num;  
float fl;  
publictest( );  
int getint( ){return num;}  
float getfloat( ){return fl;}test( );  
};  
test∶∶test( );  
{cout<<″lnitalizing default<<endl;  
num=0;fl=0.0;  
}  
test∶∶~test( )  
{cout<<″Desdtructor is active″<<endl;}  
int main( )  
{test array[2];  
cout<<array[1].get int ( )<<″ ″<<array[1].getfloat()<<endl;  
} 

lnitalizing default
lnitalizing default
0 0.0
Desdtructor is active
Desdtructor is active

五、编程题

1、写一个字符串类(String),要求至少要有赋值操作符,copy构造函数, +操作符。

试题

一、填空题()  
1.派生类的主要用途是可以定义其基类中_______。  
2.当建立_______,程序自动调用该类的构造函数。  
3.定义重载函数时,应在_______上有所不同。  
4.类是用户定义的类型,具有类类型的变量称作_______。  
5.当一个成员函数被调用时,该成员函数的_______指向调用它的对象。  
6.拷贝构造函数通过_______使用引用来初始化创建中的对象。  
7.在C++中有二种_______方式即值传递和_______传递。    
二、完成程序题()  
1.在下面程序的底画线处填上适当的字句,使该程序执行结果为60# include <iostream.h>  
class base{int X;  
publicvoid int (int initX){X=initX; }  
int  Getnum() {return  X+7; }  
void main()  
{_______  
_______  
cout<<test.Getnum();  
}  
2.在下面程序的底画线处填上适当的字句,完成类中成员函数的定义。  
# include <iostream.h>  
class box{     privateint color;int upx,upy;int lowx,lowy;  
publicfriend int same_color(line a,box b);  
_______;  
void define_box(int x1,int y1,int x2,int y2){upx=x1;upy=y1;}  
};  
class line{    privateint color;int startx,starty;int len;  
public∶  
friend_int same_color(line a,box b);  
_______;  
void define_line(int x,int y){startx=x;}  
};  
int same_color(line a,box b)  
{if(a.color= =b.color)  
return 1;  
return 0;}  

3.在下面程序的底画线处填上适当的字句,完成程序。  
# include <iostream.h>  
class A{   
_______(int i){cout<<i<<endl;}  
void g(){cout<<”g\n”;}  
}; 
closs B∶A{   
publicvoid h(){cout<<”h\n”;}  
_______;  
};  
void main(); 
{   B d1;  
d1.f(6);  
d1.h();  
}  

4.在下列程序的空格处填上适当的字句,使输出为:085# include <iostream.h>  
# include <math.h>  
class Magic{  
double x;  
publicMagic(double d=0.00)x(fabs(d)){}  
Magic _______{return Magic(sqrt(x*x+c.x*c.x));}  
_______<<(ostream & os,Magic c){return os<<c.x;}  
};  
void main()  
{Magic ma;  
cout<<ma<<,<<Magic(-8)<<,<<ma+Magic(-3)+Magic(-4);  
}  

三、问答题()
1.简述引用和指针
2. C++的三大特性是什么?请简单描述。
3. 谈谈对this指针的理解。
四、综合应用题()  
1.分析下列程序可能的输出结果。)  
# include “iostream.h”  
class test{privateint num;  
float fl;  
publictest( );  
int getint( ){return num;}  
float getfloat( ){return fl;}test( );  
};  
test∶∶test( );  
{cout<<″lnitalizing default<<endl;  
num=0;fl=0.0;  
}  
test∶∶~test( )  
{cout<<″Desdtructor is active″<<endl;}  
int main( )  
{test array[2];  
cout<<array[1].get int ( )<<″ ″<<array[1].getfloat()<<endl;  
}  

五、编程题() 
1.写一个字符串类(String),要求至少要有赋值操作符,copy构造函数, +操作符。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值