gpt4 book ai didi

c++ - 使用构造函数参数实例化类对象和不带参数 C++ 的 * 运算符之间的区别

转载 作者:行者123 更新时间:2023-11-30 03:40:09 25 4
gpt4 key购买 nike

我在研究 C++ 中的 OOPS 概念时遇到了这个教程链接。 http://www.tutorialspoint.com/cplusplus/cpp_polymorphism.htm

在基类 Shape 中,它有一个带有两个参数的构造函数来设置它的 protected 变量,在 main() 中我认为唯一的方法是为类创建一个对象Shape 是通过执行类似 Shape shape(2,4) 的操作来匹配 Shape 类中的构造函数。

有人能说说没有任何参数的实例化 Shape *shape 是如何工作的吗?通过 Shape shape(2,4)Shape 创建对象有什么区别*形状

#include <iostream>

using namespace std;

class Shape{
protected:
int w,h;

public:

Shape(int a, int b){
w=a;
h=b;
}
int area(){
cout << "Shape class area" << endl;
return 0;
}
};

class Rect:public Shape{

public:

Rect(int a, int b):Shape(a,b) {}
int area(){
cout <<"Rect class area " << endl;
return w*h;
}
};

class Tri:public Shape{

public:

Tri(int a, int b):Shape(a,b) {}
int area(){
cout << "Tri class area" << endl;
return (w*h)/2;
}
};

int main(){

Shape *shape;
Rect r(4,5);
Tri t(4,5);
shape=&r;
shape->area();
shape=&t;
shape->area();
return 0;
}

最佳答案

声明

Shape *shape;

不创建类 Shape 的任何实例。它声明一个变量,该变量是 Shape * 类型的指针,并且未初始化,即它具有不确定的值,前提是该声明声明了一个局部变量。

至于构造函数,则该类唯一具有两个参数的构造函数也是该类的默认构造函数,因为每个参数都有一个默认参数。

Shape( int a=0, int b=0)
^^^ ^^^
{
//...
}

因此你可以这样写

Shape sh;

创建对象的数据成员将由这些默认参数初始化。这个声明等同于

Shape sh( 0, 0 );

关于c++ - 使用构造函数参数实例化类对象和不带参数 C++ 的 * 运算符之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38227630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com