对protected使用的疑惑
各位大佬 protected修饰的数据成员只有子类,朋友和他自己能自由使用那这段代码在这里为什么会报错呢class Animal
{
public:
Animal(std::string theName);
void eat();
void sleep();
void drool();
protected:
std::string name;
};
.
.
.
Pig pig("小猪猪");
Turtle turtle("小甲鱼");
pig.name = "小甲鱼";//此处会报错
protected是在基类animal里修饰 name的 那子类pig也就能够修改名字? 我不知道哪里错了
你对 ”子类中” 是不是有什么误解
子类中是这样的
this->name = "小甲鱼";
this指针指向当前对象
pig.name = "小甲鱼";//此处会报错
这是在子类外面操作的
人造人 发表于 2021-3-26 00:09
你对 ”子类中” 是不是有什么误解
子类中是这样的
protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成privat
pig.name 也是调用的子类对象的成员函数呀 这也算在子类外进行操作吗? 仲夏夜之梦626 发表于 2021-3-26 08:29
protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部 ...
你的误解很深,对于类是public,和对于对象是public是不一样的
什么叫类内和类外
就像你的Animal类,eat() sleep() drool()这些方法的定义叫类内
你都已经创建对象了,Pig pig,Pig是类pig是什么?是对象,它不是类怎么可能是类内呢 如果是 protected,那么你只能通过 this指针访问,如 this->name = s;,用this访问name变量
请问你可以在main函数中这样写吗?
this->name = "123";
#include <iostream>
#include <string>
class A {
protected:
std::string name;
};
class B: public A {
public:
void set_name(std::string s) {
this->name = s;
}
std::string get_name() {
return this->name;
}
};
int main() {
B b;
b.set_name("123");
// this->name = "123";
return 0;
}
yuxijian2020 发表于 2021-3-26 09:01
你的误解很深,对于类是public,和对于对象是public是不一样的
什么叫类内和类外
就像你的Animal类,eat() ...
我刚刚看了下书 书上写的 protected修饰的成员能被派生类成员和友元访问,这些成员只对派生类对象是可访问的,我也迷糊了。。。。。 人造人 发表于 2021-3-26 10:44
如果是 protected,那么你只能通过 this指针访问,如 this->name = s;,用this访问name变量
请问你可以在m ...
意思是如果要修改名字,只能在派生类中定义一个修改名字的成员函数,不能直接对名字进行赋值? 仲夏夜之梦626 发表于 2021-3-26 14:54
意思是如果要修改名字,只能在派生类中定义一个修改名字的成员函数,不能直接对名字进行赋值?
public的可以,protected和private的不行
页:
[1]