C++中关于派生类构造函数的问题
来源:百度知道 编辑:UC知道 时间:2024/06/21 10:22:59
#include <iostream>
using namespace std;
class A
{ public: A(int a) //构造函数
{this->a=a;} //析构函数
~A(){};
void show_A(){cout < <a;}
private: int a;
};
class B :public A
{ public: B(int a,int b):A(a) //构造函数
{this->b=b;}
~B(){}; //析构函数
void show_B()
{
show_A(); //调用从A继承过来的函数 访问基类的私有成员数据a
cout < <b;
}
private: int b;
};
int main()
{ B t1(1,2);
t1.show_B();
return 0;
}
2个问题:
1. 为什么B类可以调用A的构造函数?? 构造函数和析构函数是不能被继承的 主函数中没有建立A的对象 那么B对象t1(1,2)中1的值传递给谁, 1对A这个类有什么意义咧??
2. 为什么B对象能为A的私有成员变量赋值 建立一个对象就能篡改A类的数据 这不是破坏了A的封装吗?
C++到底有没有封装特性吖!!
using namespace std;
class A
{ public: A(int a) //构造函数
{this->a=a;} //析构函数
~A(){};
void show_A(){cout < <a;}
private: int a;
};
class B :public A
{ public: B(int a,int b):A(a) //构造函数
{this->b=b;}
~B(){}; //析构函数
void show_B()
{
show_A(); //调用从A继承过来的函数 访问基类的私有成员数据a
cout < <b;
}
private: int b;
};
int main()
{ B t1(1,2);
t1.show_B();
return 0;
}
2个问题:
1. 为什么B类可以调用A的构造函数?? 构造函数和析构函数是不能被继承的 主函数中没有建立A的对象 那么B对象t1(1,2)中1的值传递给谁, 1对A这个类有什么意义咧??
2. 为什么B对象能为A的私有成员变量赋值 建立一个对象就能篡改A类的数据 这不是破坏了A的封装吗?
C++到底有没有封装特性吖!!
派生类对象生成时,调用构造public: B(int a,int b):A(a) ,其中就已经调用了基类构造函数,并且将形参int a 赋给了 A(a).
私有成员变量不能被派生类直接调用,但是可以通过public函数来访问的,这是封装的规则之一