0

我注意到,即使构造函数没有参数,前者也会进入我创建的构造函数,而后者仅在需要参数时才进入我创建的构造函数。

// ConsoleApplication11.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
#include "string"

using namespace std;


class myRectangle {
    int width;
    public:
        int getWith();
        void setWidth(int newWidth) {width = newWidth;};
        myRectangle (int);
        ~myRectangle ();
};
myRectangle::myRectangle (int w) {
    width = w;
    cout << "myRectangel Constructor\n";
}

myRectangle::~myRectangle() {
    cout << "destructor\n";
}

void runObject();

int _tmain(int argc, _TCHAR* argv[])
{
    runObject();
    int exit; cout << "\n\n"; 
    cin >> exit;
    return 0;
}

void runObject() 
{
    myRectangle mr (5);
}

FAIL // ConsoleApplication11.cpp : 定义控制台应用程序的入口点。//

#include "stdafx.h"
#include "iostream"
#include "string"

using namespace std;


class myRectangle {
    int width;
    public:
        int getWith();
        void setWidth(int newWidth) {width = newWidth;};
        myRectangle ();
        ~myRectangle ();
};
myRectangle::myRectangle () {
    cout << "myRectangel Constructor\n";
}

myRectangle::~myRectangle() {
    cout << "destructor\n";
}

void runObject();

int _tmain(int argc, _TCHAR* argv[])
{
    runObject();
    int exit; cout << "\n\n"; 
    cin >> exit;
    return 0;
}

void runObject() 
{
    myRectangle mr ();
}
4

3 回答 3

3
myRectangle mr(5);

这里,mr是一个myRectangle实例,使用myRectangle带有单个 int 参数的构造函数构造。

myRectangle mr ();

这里,mr是一个没有参数并返回 a 的函数myRectangle。这是一个令人困惑的解析,可以通过使用大括号初始化在 C++11 中避免。也可以通过省略括号来避免:

myRectangle mr; //  C++03 and C++11
myRectangle{};  //  C++11
于 2013-05-07T16:54:39.747 回答
1

里面:

 void runObject() 
 {
     myRectangle mr ();
 }

myRectangle mr();不是创建 的对象myRectangle,而是声明一个名称mr不带参数且返回类型为的函数myRectangle

于 2013-05-07T16:54:50.360 回答
1

myRectangle mr = myRectangle();实例化并构造类的一个实例myRectangle。相反,myRectangle mr ();声明mr为返回myRectangle且不带参数的函数。

于 2013-05-07T16:54:53.753 回答