|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
同样,得到的值也是一个没有被初始化的值。
|
|