选择
A
A
申请了5个对象的空间,所以构造调用5次,但只析构了一次,应该用delete[] pclassa
申请空间malloc/calloc/realloc--->free
new--->delete
new[]->delete[]
B
D
静态成员变量:所有对象所共有的,并不属于具体的某个对象。
在类中声明(带static),类外面定义(不带static)。
静态成员变量一定不能在初始化列表初始化。
在类外访问静态成员变量时:
对象.静态成员 或者 类名::静态成员
A
C
一元运算符:该操作符只需要一个参数比如,++ --
前置++ A& operator++()
后置++ A operator++(int)
B
obj1 obj2 调用构造
obj3调用拷贝构造
return 0 函数结束->释放对象->调用析构
D
A const修饰的静态成员变量可以在类内初始化。
class A
{
private:
const static int _b=10;
}
B
类的指针不会调用析构函数。类的成员会调用析构函数。
假设A类的构造函数是私有的,在类外,A*pa=new A;
new原理:1、申请空间 2、调用构造函数进行初始化(×) 即不能在类外面创建对象
delete原理:1、调用函数的析构函数(×)。2、释放空间。
需要给A的共有成员函数中添加一个函数
void Release(A*&p)
{ delete p;
}
B
template<class T>
template<typename T>
template<class T1,class T2>
template<class T1,typename T2>
编程
走方格的方案数
思路:动态规划,当前位置只能由当前行的前一个位置或者上一行的同列位置过来
#include <iostream>
#include <vector>
using namespace std;
int main()
{
//m行 n列
int n,m;
cin>>n>>m;
vector<vector<int>>dp(m+1,vector<int>(n+1,0));
for(int i=0;i<m+1;i++) dp[i][0]=1;
for(int j=0;j<n+1;j++) dp[0][j]=1;
for(int i=1;i<m+1;i++)
{
for(int j=1;j<n+1;j++)
{
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
cout<<dp[m][n]<<endl;
return 0;
}
另类加法
class UnusualAdd {
public:
//以二进制1+3为例
//0000 0001
//0000 0011
//不考虑进位时,二者相加后的数应该为 0000 0010
//进位的值应该是 0000 0001<<1
//然后二者再相加 0000 0010 0000 0010
//不考虑进位时 应该为 0000 0000
//进位的值应该是 0000 0010<<1
//在加就是+0了
int addAB(int A, int B)
{
if(A==0) return B;
if(B==0) return A;
int a=A^B;//这里计算的是不考虑进位时的值
int b=(A&B)<<1;//这里计算的是进位的值
return addAB(a,b);
}
};