知识点:对于内置类型而言,new仅仅是分配内存,除非后面显示加(),相当于调用它的构造函数,对于自定义类型而言,只要
一调用new,那么编译器不仅仅给它分配内存,还调用它的默认构造函数初始化,即使后面没有加()
int *p=new int[10];只申请了内存空间,里面的值是随机的
int *p=new int[10]();申请内存空间,并调用构造函数。
一调用new,那么编译器不仅仅给它分配内存,还调用它的默认构造函数初始化,即使后面没有加()
int *p=new int[10];只申请了内存空间,里面的值是随机的
int *p=new int[10]();申请内存空间,并调用构造函数。
知识点:分解质因数如20->2*10 10->2*5
void decompose_prime(int n)
{
int k=2;
if(n>=2)
{
while(n%k) k++;
n/=k;
cout<<k<<endl;
decompose_prime(n);
void decompose_prime(int n)
{
int k=2;
if(n>=2)
{
while(n%k) k++;
n/=k;
cout<<k<<endl;
decompose_prime(n);
}
return;
}
return;
}
知识点:函数外部访问x等于??如果是函数外定义那么是0. 如果是函数内定义,那么是随机值,因为没有初始化
enum string{
x1,
x2,
x3=10,
}x;
知识点:封装性是基础,继承性是关键,多态性是补充,并且多态性存在于继承的环境中。
封装性:类是支持数据封装的工具,对象是数据封装的实现
继承性:一个类可以根据需要生成它的派生类,派生类还可以再生成派生类。派生类继承基类的成员,
另外,还可以定义自己的成员。继承是实现抽象和共享的一种机制。
另外,还可以定义自己的成员。继承是实现抽象和共享的一种机制。
多态性: 多态性是指对不同类的对象发出相同的消息将会有不同的实现
C++语言支持多态性表现在:
1,C++语言允许函数重载和运算符重载。
2,C++语言通过定义虚函数来支持动态联编,动态联编是多态性的一个重要的特征
C++语言支持多态性表现在:
1,C++语言允许函数重载和运算符重载。
2,C++语言通过定义虚函数来支持动态联编,动态联编是多态性的一个重要的特征
虚函数是类的成员函数
函数重载允许非成员函数,而虚函数则不行
函数重载的调用根据参数的个数、序列来确定,而虚函数依据对象确定
函数重载允许非成员函数,而虚函数则不行
函数重载的调用根据参数的个数、序列来确定,而虚函数依据对象确定
知识点:D和C生命周期都是全局的,先释放 D 在释放 C的原因是, 程序中首先调用的是 C的构造函数,然后调用的是 D
的构造函数,析构函数的调用与构造函数的调用顺序刚好相反。
设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为? A B D C
C c;
void main()
{
A*pa=new A();
B b;
static D d;
delete pa;
}
C c;
void main()
{
A*pa=new A();
B b;
static D d;
delete pa;
}
知识点:
error: stray ‘\200’ in program这个错误基本都是从网页复制代码,然后编译后产生
用cat -A 文件名,可以看到每行后面都有个^M,,,删掉后还不可以就是有中文字符,用notepad++ANSI格式可以看中文乱码。
知识点:
三者说:有重载、重写和覆盖。出自《Java高手真经之Java核心编程技术》其中:
override覆盖:子类继承了父类的同名无参函数。当子类从父类继承了一个无参函数,而又定义了一个同样的无参函数,则子类
定义的方法覆盖父类的方法,称为覆盖。
overload重载:子类继承了父类的同名有参函数。当子类继承了父类的一个同名方法,且方法参数不同,称为重载。
通过方法的重载,子类可以重新实现父类的某些方法,使其具有自己的特征。
overwrite重写(当同一类的):当前类的同名方法。通过方法的重写,一个类可以有多个具有相同名字的方法,由传递给它们不
同的个数和类型的参数来决定使用哪种方法。因此,重写的名称是当前类中的同名函数,不是父类中的函数名。
知识点:父类指针指向子类实例对象,调用普通重写方法时,会调用父类中的方法。而调用被子类重写虚函数时,
会调用子类中的方法。
写出下面程序的输出结果 :FuncA called FuncBB called
class A
{
public:
void FuncA()
{
printf( "FuncA called\n" );
}
virtual void FuncB()
{
printf( "FuncB called\n" );
}
};
class B : public A
{
public:
void FuncA()
{
A::FuncA();
printf( "FuncAB called\n" );
}
virtual void FuncB()
{
printf( "FuncBB called\n" );
}
};
void main( void )
{
B b;
A *pa;
pa = &b;
pa->FuncA();
pa->FuncB();
}
会调用子类中的方法。
写出下面程序的输出结果 :FuncA called FuncBB called
class A
{
public:
void FuncA()
{
printf( "FuncA called\n" );
}
virtual void FuncB()
{
printf( "FuncB called\n" );
}
};
class B : public A
{
public:
void FuncA()
{
A::FuncA();
printf( "FuncAB called\n" );
}
virtual void FuncB()
{
printf( "FuncBB called\n" );
}
};
void main( void )
{
B b;
A *pa;
pa = &b;
pa->FuncA();
pa->FuncB();
}