ZeroTw 发表于 2020-5-31 22:01:31

求助

为什么“*****”没有打印
#include<iostream>
using namespace std;
class A
{
public:
        A(const string x):str(x)
        {}
        virtual void print()const
        {
                cout << str;                   <---------------没有打印
                cout << "aaaaa";
        }
private:
        string str;
};
class B :public A
{
public:
        B(const string x) :A(x)
        {}
        void print()const
        {
                cout << "1111" << endl;
                A::print();
        }
};
int main()
{
        A* ptr = &B("*****");
        ptr->print();
}

lei1996 发表于 2020-6-2 00:16:40

A* ptr = &B("*****");
拆分开写能显示:
B b = B("*****");
A* ptr = &b;

我叫MD 发表于 2020-6-2 00:24:26

我去,看到你这个问题,我才知道我C++基本忘光了,学了C,学C++,之后,基本还是拿C写代码,不过,翻看了下笔记,测试了一下,应该是
A* ptr = &B("*****"); 这个有问题,因为 B("*****"); 是个匿名对象,特点是,当前行执行结束后,系统会立即回收匿名对象,所以你的 ***** 不见了
因为已经被系统回收了,以下这么写,应该能解决你的问题,先将对象创建出来,然后在取地址

      B a("*****");
      A* ptr = &a;
      ptr->print();

页: [1]
查看完整版本: 求助