马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编译器默认生成的构造函数是什么样的?比如下面这段代码#include <bits/stdc++.h>
using namespace std;
class CRectangle{
public:
int w,h;
void Init(int w_,int h_);
inline int Area();
int Perimeter();
};
void CRectangle::Init(int w_,int h_){
w=w_;h=h_;
}
int CRectangle::Area(){
return w*h;
}
int CRectangle::Perimeter(){
return 2*(w+h);
}
int main(void)
{
int w,h;
CRectangle r1,r2;
CRectangle *p1=&r1;
CRectangle &p2=r2;
cin>>w>>h;
r1.Init(w,h);
p2.h=5;
p2.w=6;
cout<<r1.Area()<<endl<<r2.Perimeter()<<endl;
return 0;
}
如果不写void CRectangle::Init(int w_,int h_){
w=w_;h=h_;
}
编译器生成的构造函数的代码是怎么样的呢?
编译默认生成构造函数 是一个无参构造函数。什么事情都不做,只能让你语法正确。大概就是这个样子:
空说无凭,我们再来论证一下,众所周知,编译器生成默认构造的前提是, 你自己没有写无参构造,或者赋值构造,再或者拷贝构造,如果写了其中一个,那么编译器就不会生成了。所以有了下面这个代码; #include <iostream>
class Test {
public:
int geta() { return this->a; }
private:
int a;
};
int main() {
Test b;
std::cout << b.geta() << std::endl;
system("pause");
return 0;
}
同样,得到的值也是一个没有被初始化的值。
|