1 在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数,virtual 函数返回类型 函数名(参数表) {函数体;},实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数。
在基类声明为virtual并且在派生类重新定义的成员函数。用于实现多态性,通过指向派生类的指针来实现访问派生类的同名函数。
2 虚函数
#include<iostream.h>
class base
{
public:
virtual void say()
{
cout<<”i am base!”<<endl;
}
};
class child:public base
{/*
public:
void say()
{
cout<<”i am child!”<<endl;
}*/
};
int main()
{
base* mybase=new child;
//实现多态, 打印i am a child
mybase->say();
//如果派生类没有重写虚函数,那么自动调用父类函数
return 0;
}
3 请问程序的输出结果是(30)
#define DOUBLE(x) x+x // x*2
int i = DOUBLE(5)*5;
cout<<i<<endl;
注意在宏定义的使用中需要注意的问题 其中//为注释部分。
4 程序出错在什么阶段?()
int main(void)
{
http://www.sogou.com
cout<<”welcome to sogou”<<endl;
return 0;
}
A、编译阶段出错 B、运行阶段出错 C、编译和运行都出错 D、程序运行正常
因为http://www.sogou.com中//后面是注释,前面的http:是标签(类似于goto语句中的标签)。(这个题目碉堡了)
因为http://www.sogou.com中//后面是注释,前面的http:是标签(类似于goto语句中的标签)。(这个题目碉堡了)
注意在C语言或者C++中使用的“:”,表示的是标签,即也算是可执行语句。
5 数组指针的大小和指针的大小一样,都是为4.
6 含有虚函数的类会增加4个字节的指针长度。
7 构造对象的过程
1) 首先会按对象的大小得到一块内存(在heap上或在stack上),
2) 把指向这块内存的指针做为this指针来调用类的构造函数,对这块内存进行初始化。
3) 如果对象有父类就会先调用父类的构造函数(并依次递归),如果有多个父类(多重继承)会依次对父类的构造函数进行调用,并会适当的调整this指针的位置。在调用完所有的父类的构造函数后,再执行自己的代码。
2) 把指向这块内存的指针做为this指针来调用类的构造函数,对这块内存进行初始化。
3) 如果对象有父类就会先调用父类的构造函数(并依次递归),如果有多个父类(多重继承)会依次对父类的构造函数进行调用,并会适当的调整this指针的位置。在调用完所有的父类的构造函数后,再执行自己的代码。
8 采用new操作符创建对象时,如果没有足够内存空间而导致创建失败,则new操作符会返回NULL。错误
不会返回NULL,会直接抛出异常。
9 成员函数是不属于对象的。
#include<iostream.h>
class base
{
public:
void say()
{
cout<<”hello world!”<<endl;
}
};
int main()
{
base* A=NULL;
A->say();//可以直接调用,成员函数不属于类
return 0;
}
10 类模板的用法
#include<iostream.h>
//类模板的用法
template<class type>
class Base
{
type a;
public:
Base(type value)
{
a=value;
}
void say()
{
cout<<a<<endl;
}
};
int main()
{
Base<int> B(12);
B.say();
return 0;
}
11 Debug和Release的区别在于:因为在Debug中有ASSERT断言保护,所以要崩溃,而在Release中就会删掉ASSERT,所以会出现正常运行。
转载请注明:IT部落格