网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月24日漏签0天
c++吧 关注:647,248贴子:2,117,414
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 12回复贴,共1页
<<返回c++吧
>0< 加载中...

类B用公有继承的方式继承了类A的私有成员变量a,b,c,d,

  • 只看楼主
  • 收藏

  • 回复
  • 红发的黑雪姬
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
类B用公有继承的方式继承了类A的私有成员变量a,b,c,d,同时我又在B(B是子类)中声明了私有成员变量a,b,c,d,问题来了,我定义一个B的对象tmp,用getter打印tmp的a,b,c,d,发现重写getter后出现问题,变量a,b,c,d同名为什么没有报错



  • 红发的黑雪姬
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <iostream>
using namespace std;
struct point {
float x, y;
};
class Quadrangle
{
public:
void init() // sets coordinates for A, B, C, D
{
cout << "a:";
cin >> a;
cout << "Input A coordinates (x, y): ";
cin >> A.x >> A.y;
cout << "Input B coordinates (x, y): ";
cin >> B.x >> B.y;
cout << "Input C coordinates (x, y): ";
cin >> C.x >> C.y;
cout << "Input D coordinates (x, y): ";
cin >> D.x >> D.y;
};
void show()
{
cout << a << endl;
cout << "A:(" << A.x << "," << A.y << ")\n";
cout << "B:(" << B.x << "," << B.y << ")\n";
cout << "C:(" << C.x << "," << C.y << ")\n";
cout << "D:(" << D.x << "," << D.y << ")\n";
}
void square()
{
// square calculation
};
int a;
private:
point A, B, C, D;
//int a;
};
class Rectangle : public Quadrangle
{
public:
void square()
{
// square calculation
};
/*
void show()
{
cout << a << endl;
cout << "A:(" << A.x << "," << A.y << ")\n";
cout << "B:(" << B.x << "," << B.y << ")\n";
cout <


2025-12-24 06:58:40
广告
不感兴趣
开通SVIP免广告
  • 红发的黑雪姬
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
class Rectangle : public Quadrangle
{
public:
void square()
{
// square calculation
};
/*
void show()
{
cout << a << endl;
cout << "A:(" << A.x << "," << A.y << ")\n";
cout << "B:(" << B.x << "," << B.y << ")\n";
cout << "C:(" << C.x << "," << C.y << ")\n";
cout << "D:(" << D.x << "," << D.y << ")\n";
}
*/
private:
point A, B, C, D;
int a;
};
int main()
{
Rectangle tmp;
tmp.init();
tmp.show();
}


  • 红发的黑雪姬
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在子类重写和不重写show方法得到的结果不同


  • 红发的黑雪姬
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼



  • 红发的黑雪姬
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我通过sizeof打印验证确实子类占的内存是父类的2倍,因为我在子类都声明了同名的变量


  • wwww9
  • &
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
重名的时候子类优先,用Quadrangle::xxx使用父类的那一份


  • Dawn
  • +
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
被嵌套的作用域中的名称会被嵌套其中的作用域中的同名名称覆盖。
对于non-virtual成员,其表达的是不变性,请不要在派生类中定义同名成员。


2025-12-24 06:52:40
广告
不感兴趣
开通SVIP免广告
  • 纸短_情长阿
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
变量在类里有效


  • 射命丸文
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
因为你子类的show打印的是子类的ABCD成员,然而你init是父类的函数,初始化的是父类的ABCD成员。子类再写个show把父类的覆盖了,除非你使用b.A::show()来调用父类的show,不然调的只会是子类的show。然后你show打印的是子类没初始化的成员。如果你子类不写show,那么没有覆盖父类的show,之后调用的也是父类的show,父类的成员你是在init里初始化过了的,所以不是无效值。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 12回复贴,共1页
<<返回c++吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示