1.派生类的主要用途是可以定义其基类中_______。
2.当建立_______,程序自动调用该类的构造函数。
3.定义重载函数时,应在_______上有所不同。
4.类是用户定义的类型,具有类类型的变量称作_______。
5.当一个成员函数被调用时,该成员函数的_______指向调用它的对象。
6.拷贝构造函数通过_______使用引用来初始化创建中的对象。
7.在C++中有二种_______方式即值传递和_______传递。
1、同名同参的虚函数
2、对象/本类对象
3、参数列表
4、对象
5、this指针
6、通过本类对象
7、参数传递方式、引用
相当于将同名同参是虚函数重新写了一下,主要是为了虚函数的实现多态,派生类通过定义基类,把基类中同名同参的虚函数重新定义之后,就可以去实现多态
对象。建立对象调用该类对象的构造函数。调用构造函数的步骤分为三部:传参、根据数据成员在类里面的声明顺序开辟空间、执行构造函数函数体。有继承和组合的时候:先按照继承顺序调用基类的构造、按照组合顺序调用组合的构造、调用自身的构造。
函数重载的规则:
函数名称必须相同。
参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
函数的返回类型可以相同也可以不相同。
仅仅返回类型不同不足以成为函数的重载。
函数重载相关知识点博客链接:http://t.csdn.cn/Ne3MG
类与对象的区别:
类是抽象出来的,在内存中不占空间。
对象是类的实例化,具体化,需要占空间。
类的非静态成员成员函数有一个隐藏的this指针,静态成员函数是没有this指针的。
即拷贝构造函数的参数就是本类对象的引用。
1)拷贝构造函数的参数类型:
值类型、指针类型、引用类型
2)调用拷贝构造函数的三种情况:
用一个本类的旧对象去构造另一个本类的新对象。
类类型的值传递
返回类型为值传递的时候,会调用拷贝构造。
浅拷贝(无指针,直接调用默认拷贝构造函数)和深拷贝(有指针)
# include
class base{int X;
public∶
void int (int initX){X=initX; }
int Getnum() {return X+7; }
void main()
{_______
_______
cout<<test.Getnum();
}
base test;
test.init(53);
# include
class box{ private∶
int color;int upx,upy;int lowx,lowy;
public∶
friend int same_color(line a,box b);
_______;
void define_box(int x1,int y1,int x2,int y2){upx=x1;upy=y1;}
};
class line{ private∶
int 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);
可知,该为一个友元函数,为一个普通函数。
# include
class A{
_______(int i){cout<<i<<endl;}
void g(){cout<<”g\n”;}
};
closs B∶A{
public∶void h(){cout<<”h\n”;}
_______;
};
void main();
{ B d1;
d1.f(6);
d1.h();
}
virtual void f
void f(int i){cout<<"i"<
构成多态
# include
# include
class Magic{
double x;
public∶
Magic(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、初始化:
引用声明的时候必须要初始化,指针可以不初始化,但会出现野指针;
2、NULL;
引用在初始化的时候不能初始化为NULL,但指针可以初始化为NULL;
3、修改:
引用一旦和实体相关起来就不可以修改,指针可以改变;
4、大小:
引用的大小和实体大小一样,指针大小永远是4字节;
相同点:都能通过所关联的变量修改关联的值:
在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。
成员函数默认第一个参数为T* const register this。
(友元函数,全局函数不是成员函数)
静态函数如同静态变量一样,他不属于具体的哪一个对象,静态函数表示了整个类范围意义上的信息,而this指针却实实在在的对应一个对象,所以this指针不能被静态函数使用。
this指针在成员函数的开始执行前构造的,在成员的执行结束后清除。
创建一个对象后,不能通过对象使用this指针。也无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。当然,在成员函数里,你是可以知道this指针的位置的(可以&this获得),也可以直接使用的。
————————————————
版权声明:本文为CSDN博主「我是一名好学者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43751983/article/details/91147918
# include “iostream.h”
class test{private∶
int num;
float fl;
public∶
test( );
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
class base{int X;
public∶
void int (int initX){X=initX; }
int Getnum() {return X+7; }
void main()
{_______
_______
cout<<test.Getnum();
}
2.在下面程序的底画线处填上适当的字句,完成类中成员函数的定义。
# include
class box{ private∶
int color;int upx,upy;int lowx,lowy;
public∶
friend int same_color(line a,box b);
_______;
void define_box(int x1,int y1,int x2,int y2){upx=x1;upy=y1;}
};
class line{ private∶
int 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
class A{
_______(int i){cout<<i<<endl;}
void g(){cout<<”g\n”;}
};
closs B∶A{
public∶void h(){cout<<”h\n”;}
_______;
};
void main();
{ B d1;
d1.f(6);
d1.h();
}
4.在下列程序的空格处填上适当的字句,使输出为:0,8,5。
# include
# include
class Magic{
double x;
public∶
Magic(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{private∶
int num;
float fl;
public∶
test( );
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构造函数, +操作符。