class base
{
public:
int base_public;
private:
int base_private;
protected:
int base_protected;
};
class derived :protected base
{
public:
void access() {
base_public = 1;
base_protected = 2;
}
};
派生类中的public声明是不是没有意义?不管是不是public,派生类中的成员都是protected权限?
有用,不是的 基类如果是 public 如果派生类 public继承,public成员可以在外部调用
derived d;
d.base_public;
派生类继承了基类的成员,在派生类中可以访问基类中的公有成员和保护成员。派生类可以通过不同的方式来继承基类的成员,包括公有继承、私有继承和保护继承。
class Person
{
public:
void Display()
{
cout << "AA" << endl;
}
protected:
string _name; // 姓名
};
class Student : public Person
{
public:
int _num; // 学号
};
int main()
{
Person a;
Student b;
a = b; //子类对象赋值给基类对象(切片)这个特性是编译器支持的
b = a; //父类对象不能赋值给子类对象
Person *p1 = &b; //特性3
//Person &a1 = b; //特性3
Student *p2 = (Student*)&a; //特性4
Student& b1 = (Student&)a; //特性4
getchar();
return 0;
}
在C++中,派生类中的public声明具有重要意义。派生类中的public声明可以继承基类的公有成员,并且这些成员可以被派生类的对象访问。无论是在派生类中声明成员变量还是成员函数,它们的访问权限都会被限制为protected。这意味着派生类的成员变量和成员函数可以被派生类的对象和派生类的其他成员函数访问,但不能被派生类对象外部的代码直接访问。
以下是一个示例代码来说明派生类中的权限问题:
#include <iostream>
class Base {
protected:
int protectedVar;
private:
int privateVar;
public:
int publicVar;
};
class Derived : public Base {
public:
void print() {
std::cout << protectedVar << std::endl; // 可以访问派生类继承的protected变量
std::cout << privateVar << std::endl; // 错误!派生类无法访问基类的私有变量
std::cout << publicVar << std::endl; // 可以访问派生类继承的public变量
}
};
int main() {
Derived derived;
derived.print();
return 0;
}
在这个示例中,派生类Derived继承了基类Base。在Derived的print函数中,我们可以直接访问派生类继承的protected变量和public变量。但是,派生类无法访问基类的私有变量。
总结一下,无论何种访问权限在派生类中声明成员变量或成员函数,它们的访问权限都会被限制为protected。但是,派生类可以继承基类的公有成员,并且这些成员可以被派生类的对象访问。如果想要在派生类中访问基类的私有成员,可以使用基类的公有或保护方法来访问。