由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C++一问
相关主题
菜鸟请教smart pointer请问这个C++程序有什么问题吗
关于C++中一个Class的大小 (转载)一个诡异的const_cast问题
c++ 得最基本问题请问关于overloading <<
C++ 的 问题这个在c++ const不变,不能用相同地址的变量改,咋做的
A aimple C++ questionC++11 unique_ptr问题?
关于C++ copy-constructor 一个奇怪的问题C++ Strategies and Tactics 书上一个问题求助
问题which func will be called?
question about c++ constructor为什么foo1可以而foo2不行?
相关话题的讨论汇总
话题: name话题: std话题: public话题: const话题: string
进入Programming版参与讨论
1 (共1页)
J*****n
发帖数: 4859
1
class A {
public:
A(const string& _name):Name(_name) {}
const string Name;
};
class B:public A {
public:
B():A("It is B")
};
现在我有C
class C:public B
如何使C.Name成为“It is C”
谢谢
X****r
发帖数: 3557
2
Don't do it.
If you really want, use const_cast
class C : public B {
public:
C() : B() {
const_cast(name) = "It is C";
}
};
But it is a bad idea to begin with.

【在 J*****n 的大作中提到】
: class A {
: public:
: A(const string& _name):Name(_name) {}
: const string Name;
: };
: class B:public A {
: public:
: B():A("It is B")
: };
: 现在我有C

h**********c
发帖数: 4120
3
应该可以
说不清,JAVA也可以这么干。
#include
#include
class A {
public:
A(const std::string& _name):Name(_name) {}
const std::string Name;
const std::string getName () {
return Name;
}
};
class B:public A {
public:
B():A("It is B") {}
const std::string getName () {
return Name;
}
};
class C:public B {
public:
const std::string Name;
C():Name("It is C") {}
const std::string getName () {
return Name;
}
};
int main () {
A a("It is A");
B b;
C c;
std::cout< std::cout< std::cout< std::cout< std::cout< std::cout< return 0;
}

【在 J*****n 的大作中提到】
: class A {
: public:
: A(const string& _name):Name(_name) {}
: const string Name;
: };
: class B:public A {
: public:
: B():A("It is B")
: };
: 现在我有C

h*****f
发帖数: 248
4
Or you can use the "name hiding feature":
class C : public B {
public:
const std::string Name;
C() : Name("It is C") {}
};
C c;
c.Name will give you "It is C".
f*******n
发帖数: 12623
5
This is completely different. He does not want to override a method. He
wants to pass an argument to A's constructor.

【在 h**********c 的大作中提到】
: 应该可以
: 说不清,JAVA也可以这么干。
: #include
: #include
: class A {
: public:
: A(const std::string& _name):Name(_name) {}
: const std::string Name;
: const std::string getName () {
: return Name;

f*******n
发帖数: 12623
6
You can't, because C is a subclass of B. So a C object "is a" B object, so
must follow B's requirements. B objects always pass "It is B" to A's
constructor.

【在 J*****n 的大作中提到】
: class A {
: public:
: A(const string& _name):Name(_name) {}
: const string Name;
: };
: class B:public A {
: public:
: B():A("It is B")
: };
: 现在我有C

1 (共1页)
进入Programming版参与讨论
相关主题
为什么foo1可以而foo2不行?A aimple C++ question
conversion between const to nonconst关于C++ copy-constructor 一个奇怪的问题
关于const_cast,地址一样,值不同?问题
编译器如何分辨返回类型不同的函数?question about c++ constructor
菜鸟请教smart pointer请问这个C++程序有什么问题吗
关于C++中一个Class的大小 (转载)一个诡异的const_cast问题
c++ 得最基本问题请问关于overloading <<
C++ 的 问题这个在c++ const不变,不能用相同地址的变量改,咋做的
相关话题的讨论汇总
话题: name话题: std话题: public话题: const话题: string