C++ 中的 A Declaration Shadows a Parameter 错误
每个对象或变量总是有一些边界、范围或作用域来访问其他类成员,例如由 C++ 中的访问说明符定义为 public、private 或 protected 的数据成员或成员函数。
当我们在程序的特定范围或块中多次定义具有相同名称的变量时,编译器会感到困惑并抛出一个错误,指出声明隐藏了参数。
C++ 中的访问说明符
在详细了解影子参数之前,了解访问说明符非常重要。 通常,三个访问说明符是 public、private 和 protected。
C++ 中的 public 访问说明符
Public 说明符使类的所有成员(数据成员或成员函数)成为公共的,可以在整个程序中从其他类访问它们; 您可以使用点直接访问这些成员函数。 与同一类的对象的运算符。
#include<iostream>
using namespace std;
// class definition
class Cal_Circle{
public: // Public access specifier
double radius;
double compute_area(){
return 3.14*radius*radius;
}
};
// main function
int main(){
Cal_Circle obj;
// accessing public datamember outside class
obj.radius = 3.4;
cout << "Radius of the circle is: " << obj.radius << "\n";
cout << "Area of the circle is: " << obj.compute_area();
return 0;
}
输出:
Radius of the circle is: 3.4
Area of the circle is: 36.2984
C++ 中的 private 访问说明符
私有访问说明符使每个成员(无论是数据成员还是成员函数)在类的边界内保持私有。 它们不能由该类的对象在类外部直接访问。
它们对类外的访问是隐藏的,以确保程序的安全。
#include<iostream>
using namespace std;
// class definition
class Cal_Circle{
private: // private access specifier
double radius;
double compute_area(){
return 3.14*radius*radius;
}
};
// main function
int main(){
Cal_Circle obj;
// accessing public datamember outside class
obj.radius = 3.4;
cout << "Radius of the circle is: " << obj.radius << "\n";
cout << "Area of the circle is: " << obj.compute_area();
return 0;
}
输出:
error: 'double Cal_Circle::radius' is private within this context
obj.radius = 3.4;
note: declared private here
double radius;
note: declared private here
double compute_area(){
在这个例子中,我们将访问说明符用作私有,并通过主函数中的类的对象访问它。 对于此处声明为受保护的每个类成员,它都会抛出一个错误。
C++ 中的 protected 访问说明符
同样,Protected 访问说明符不能在其类外部直接通过该类的对象进行访问,但不同之处在于 Protected 类或成员可以通过派生类进行访问。
使用派生类的对象,您可以访问类的受保护成员。
#include<iostream>
using namespace std;
class Radius{ // Base class
protected: // protected access specifier
double radius;
};
class Cal_Circle : public Radius { // Derive class
public: // private access specifier
double compute_area(int a){
radius = a;
return 3.14*radius*radius;
}
};
// main function
int main(){
Cal_Circle obj;
// accessing public datamember outside class
cout << "Area of the circle is: " << obj.compute_area(3);
return 0;
}
输出:
Area of the circle is: 28.26
我们的基类是受保护的并且有一个数据成员半径。 我们已将该基类继承到 Cal_Circle,并且通过派生类的对象,我们正在访问受保护的数据成员 radius。
我们间接访问受保护类的受保护成员。
声明隐藏了 C++ 中的参数错误
在计算机编程中,存在某些称为范围的边界。 这可以是 if-else 块、函数或类。
在 if-else 块、函数或类中定义的变量不能使用,除非您将其定义为 public。 并且可以在整个程序中访问公共变量、函数或类。
另外,C++ 中禁止在特定范围内对一个变量定义两次或多次。 当您这样做时,会抛出错误,因为声明隐藏了参数。
让我们通过一个例子来理解它。
#include <iostream>
int doublenumber();
using namespace std;
int doublenumber(int x){
int x; // We are redefining the same variable as the parameter of the function
return 2 * x;
cout << endl;
}
int main(){ //Main function
int a;
cout << "Enter the number that you want to double it : " << endl;
cin >> a;
int d = doublenumber(a);
cout << "Double : " << d << endl;
return 0;
}
输出:
Test.cpp: In function 'int doublenumber(int)':
Test.cpp:6:9: error: declaration of 'int x' shadows a parameter
int x;
正如我们所看到的,我们不能在特定的代码块(如函数、类和 if-else 块)中多次定义一个变量。
在 doublenumber()
函数中,我们有一个参数 int x,并且在该函数的范围内,我们还定义了另一个局部 int x,它会隐藏该参数并引发错误。
相关文章
C++ 中的错误 Error ID Returned 1 Exit Status
发布时间:2023/08/21 浏览次数:130 分类:C++
-
C++ [Error]: Id returned 1 exit status 不是常见错误。 这通常意味着程序崩溃了,并且在不查看堆栈跟踪的情况下很难确定原因。
C++ 中错误 Too Many Arguments to Function
发布时间:2023/08/21 浏览次数:177 分类:C++
-
我们在编写一段代码时会遇到很多错误。 解决错误是编程中最关键的部分之一。本文将讨论我们在 C++ 中遇到的一个错误:Too Many Arguments to Function。
处理 C++ 中的错误
发布时间:2023/08/21 浏览次数:197 分类:C++
-
本文讨论了 C++ 中的错误和异常处理。C++ 中的错误处理 C++ 程序中可能存在多种类型的错误。 有些错误需要向用户发出提示。
C++ 中错误 Function Returns the Address of a Local Variable
发布时间:2023/08/21 浏览次数:119 分类:C++
-
根据作用域,C 和 C++ 中的变量分为局部变量和全局变量。 虽然可以从程序的任何部分访问全局变量,但局部变量却不然。让我们讨论一下为什么会出现这个错误以及如何修复它。
C++ 错误 Invalid Conversion of Int* to Int
发布时间:2023/08/21 浏览次数:154 分类:C++
-
这个简短的教程将讨论错误消息 Invalid conversation of int* to int 。 首先,让我们回顾一下 C++ 中的指针。
C++ 中的错误 Solved: Expression Must Have Class Type
发布时间:2023/08/21 浏览次数:62 分类:C++
-
让我们看看为什么会发生这种情况以及如何解决。C++ 中错误 Solved: Expression Must Have Class Type 为了更好地理解问题陈述,请查看下面的代码。 在这里,我们有一个名为 Deserts 的类,其中包含函数
C++ 中的取消引用指针
发布时间:2023/08/20 浏览次数:139 分类:C++
-
本文简要讨论 C++ 中取消引用指针。在进入我们的实际主题之前,我们首先需要了解指针是什么以及为什么 C++ 程序员需要它。